こんにちはPyQチームです。
Python 3.9が10月にリリースされます。Python 3.9にはどんな機能が追加されるのでしょうか?
今回は、Python 3.9の新要素について先取り情報を紹介します。
- Dictionary Merge & Update Operators
- New removeprefix() and removesuffix() string methods
- Builtin Generic Types
- その他の変更
Python3.9.0は、2020年7月30日時点でベータ版(beta5)がリリースされています。
正式版までのリリース予定は以下のようになっています。 (candidate
というのは正式版になる予定のバージョンのことです。candidate後はバグフィックスのみで機能の変更は原則行われないので、ベータでも新機能を試すのには十分です)
- 2020年8月10日: Python 3.9.0 candidate 1
- 2020年9月14日: Python 3.9.0 candidate 2
- 2020年10月05日: Python 3.9.0 final(正式版)
Python 3.9リリースについてはPEP596で定義されています。
PEP 596 -- Python 3.9 Release Schedule | Python.org
それではPython3.9の新要素で代表的な3つを順に見ていきましょう。
Dictionary Merge & Update Operators
辞書の結合が |
演算子でできるようになります。
いままでは、collections.ChainMapや dict(d1, **d2)
, {**d1, **d2}
で辞書の結合、 d1.update(d2)
で辞書の更新を行っていました。Python 3.9からは演算子を利用して結合ができます。
サンプルコード
【|
を利用した場合】
>>> d1 = {'spam': 1} >>> d2 = {'eggs': 2} >>> d3 = d1 | d2 >>> d3 {'spam': 1, 'eggs': 2}
【|=
を利用した場合】
>>> new_dict = {} >>> new_dict |= d1 >>> new_dict |= d2 >>> new_dict {'spam': 1, 'eggs': 2}
for文の中で利用すると便利ですね。
Dictionary Merge & Update Operators
はPEP584で定義されています。
詳細はPEPをご覧ください。
https://www.python.org/dev/peps/pep-0584/
New removeprefix() and removesuffix() string methods
文字列の先頭と末尾の文字列を取り除くメソッドが文字列に追加されました。
これまで、先頭の文字列を取り除こうとしたら、文字列 s
から接頭語 prefix
を取り除こうとすると re.sub('^' + re.escape(prefix), '', s)
のような記述が必要でした。正規表現に慣れていないと何をしているか分かりづらい記述方法でした。
サンプルコード
>>> sample_string = 'test_node_child' >>> sample_string.removeprefix('test_') # 先頭の文字列を除去 'node_child' >>> sample_string.removesuffix('_child') # 末尾の文字列を除去 'test_node' >>> sample_string.removesuffix('_node') # 末尾の文字列ではない場合は除去されない 'test_node_child'
New removeprefix() and removesuffix() string methods
はPEP616で定義されています。
詳細はPEPをご覧ください。
https://www.python.org/dev/peps/pep-0616/
Builtin Generic Types
型ヒント( typing )で利用する型アノテーションでlistや辞書、tupleなどのコレクションを利用する場合は専用の型が必要で、 typing.List
、 typing.Dict
などをimportして利用していました。
今回、標準のコレクションクラスも利用できるようになりました。typingからのインポートは非推奨になりました。
Python3.9.0のリリースから5年後にリリースされる最初のPythonのバージョンの入力モジュールから削除されます。
Builtin Generic TypesはPEP585で定義されています。
詳細はPEPをご覧ください。
https://www.python.org/dev/peps/pep-0585/
その他の変更
Python 3.9では今回紹介した3つの新要素以外にも、既存のモジュールなどの機能がupdate、廃止されます。
詳細は「Python 3公式ドキュメント - What's New In Python 3.9」をご覧ください。