Python 3.8.0 beta4がリリースされました

プログラミングPython

Python3.8.0の最後のbeta版が8月29日にリリースされました.

公式ニュース:python.org

現在の正式最新リリースは3.7.4であり,次回のメジャーアップデートでどのような変更がされるのか気になるところです.

今回はまだbetaですが,だいたいの変更点はつかめると思うので,まとめてみます.

3.8の主な新機能と変更点

  • PEP 572、代入式
  • PEP 570、位置のみの引数(パラメータ)
  • PEP 587、Python初期化設定(埋め込みの改善)
  • PEP 590、Vectorcall:CPythonの高速呼び出しプロトコル
  • PEP 578、ランタイム監査フック
  • PEP 574、帯域外データを使用するPickleプロトコル5
  • 入力関連:PEP 591(最終修飾子)、PEP 586(リテラル型)、およびPEP 589(TypedDict)
  • コンパイル済みバイトコード用の並列ファイルシステムキャッシュ
  • デバッグビルドはリリースビルドとしてABIを共有します
  • f-strings =はデバッグ用の便利な指定子をサポートします
  • continueがfinally:ブロックで使用できるようになりました
  • Windowsでは、デフォルトのasyncioイベントループはProactorEventLoopになります
  • macOSにおいて、spawn startメソッドがmultiprocessingでデフォルトで使用されるようになりました
  • multiprocessing 共有メモリセグメントを使用して、プロセス間の酸洗コストを回避できるようになりました
  • typed_ast はCPythonにマージされます
  • LOAD_GLOBAL は40%高速になりました
  • pickle はデフォルトでプロトコル4を使用するようになり、パフォーマンスが向上しました

Google翻訳様ありがとうございますw

個別解説

個人的に面白そうだと思ったものだけ取り上げました.

代入式(Assignment expressions)

この機能については,既にQiitaに良記事が出ていますので,詳しくはこちらを参考にしてください.

簡単に言うと,「:=」という演算子によって,式内で変数への代入ができるようになりました.

これまでの「=」演算子による代入文に加え,値を返す式の中で代入ができます.

これにより,より少ない行数で処理が書けるようになるようです.

例えば,,,

ans = input()
if ans == "Yes":
    print(ans, "Takasu clinic!")
else:
    print("Love your original face!")

という条件文を,

if (ans := input()) == "Yes":
    print(ans, "Takasu clinic!")
else:
    print("Love your original face!")

というように書けます.

こんなアホな例に限らず,かなり応用範囲は広そうです.

位置のみの引数(Positional-only arguments)

関数定義において,引数の順番を固定できるようになりました.

これにより,関数呼び出しの際のキーワード呼び出しを防止できます.

例えば

def example1(a,b):
    print(a,b)

という関数を定義します.

この関数は次のように呼び出せます.

example1(1,2)      ## 1 2
example1(a=1, b=2) ## 1 2
example1(b=1, a=2) ## 2 1

新機能を使うと,3番目の呼び出し方ができなくなります.

新機能を用いた関数定義は以下の通りです.

def example2(a,b,/):
    print(a,b)

example1との違いは,引数の最後に「/」がついていることです.

これを付けることにより,それより前に(左で)定義した引数は,呼び出しの際に順番が固定されます.

したがって,先ほどの例ではこうなります.

example2(1,2)      ## 1 2
example2(a=1, b=2) ## 1 2
example2(b=1, a=2) ## TypeError(詳細は次のブロック)
TypeError: example2() got some positional-only arguments passed as keyword arguments: 'a, b'

おわりに

私は特に「代入式」が面白いと思いました!

本日はここまでです.

次のプレリリース(Python 3.8.0c1)は9月30日公開とのことで,これからも注目していきたいです.

プログラミングPython

Posted by タロック