Python 3.15で注目されなかった機能たち
Python 3.15.0b1 の機能フリーズが発表され、年内のリリースに向けて複数の新機能が実装予定となっている。本記事では Jamie Chang が、メディアで大きく報じられていない AsyncIO TaskGroup キャンセル、デコレータの文脈マネージャ改善、スレッドセーフイテレータ、Counter xor 操作、frozendict を用いた不変 JSON オブジェクトなど、Python 3.15 の隠れた機能を解説している。
Python 3.15.0b1 の機能フリーズにより、年内にリリース予定の新機能が確定した。本記事で取り上げられる機能のうち、いくつかは開発者コミュニティでまだ十分な注目を集めていないとされる。
Asyncio と構造化並行処理
TaskGroup は構造化並行処理の一形態である。新しい TaskGroup.cancel メソッドにより、グループ内のタスクをキャンセルする際に例外を発生させずに処理できるようになる。これにより、以下のようなコードが実装可能になる。
async with asyncio.TaskGroup() as tg:
tg.create_task(run())
tg.create_task(run())
if await wait_for_signal():
tg.cancel()
デコレータと文脈マネージャの統合
contextmanager デコレータは Python 3.3 以降、デコレータとして利用可能である。Python 3.15 では ContextDecorator の改善により、ラップ対象の関数型を判定し、通常の関数、非同期関数、非同期イテレータなど、その全ライフサイクルをデコレータで覆うことができるようになる。
スレッドセーフなイテレータ
threading モジュールに新たに複数の機能が追加される。threading.serialize_iterator でイテレータをラップしてスレッドセーフにする、threading.synchronized_iterator デコレータでジェネレータ関数に直接 threading.serialize_iterator を適用する、threading.concurrent_tee で複数のイテレータ間で値を複製するという 3 つの手法が利用可能になる。
collections.Counter の拡張と JSON の不変オブジェクト
collections.Counter は既に加算、減算、交差、和集合の操作に対応していたが、Python 3.15 では xor 操作がサポートされるようになる。また frozendict が新たに追加され、json.load と json.loads は array_hook パラメータをサポートするようになり、object_hook パラメータを補完する形で不変 JSON オブジェクトの作成が容易になる。
筆者の見立て
- 筆者は「文脈マネージャは現在、デコレータを作成する最良の方法である」と論じている
- ContextDecorator の改善は「一般的なエラーを回避し、より清潔な構文を提供する」と解釈している
- より多くの開発者が文脈マネージャをデコレータとして使用すべきだと推奨している
この記事は元記事の事実のみに基づいて自動生成されました。
出典
blog.changs.co.uk 「Python 3.15: features that didn't make the headlines」 https://blog.changs.co.uk/python-315-features-that-didnt-make-the-headlines.html