Python 3.8.0 beta4がリリースされました
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日公開とのことで,これからも注目していきたいです.
ディスカッション
コメント一覧
まだ、コメントがありません