Python 3.9

Python 3.9.0(最終版)は 2020 年 10 月 5 日にリリースされました。3.9 の機能は PEP 596 で定義されており、変更点の詳細な説明は What's New in Python 3.9 にあります。

機能

ステータス

PEP 573

C 拡張型のメソッドからのモジュール状態への高速アクセス

関連なし

PEP 584

dict への和集合演算子の追加

完了 [1]

PEP 585

標準コレクションにおけるジェネリックの型ヒント

PEP 593

柔軟な関数および変数のアノテーション

PEP 602

CPython が年次リリースサイクルを採用。年次ではなく、2 か月のリリースサイクルを目指す

関連なし

PEP 614

デコレータの文法制限の緩和

PEP 615

IANA タイムゾーンデータベースが zoneinfo モジュールとして標準ライブラリに含まれるようになりました

PEP 616

プレフィックスとサフィックスを削除する文字列メソッド

PEP 617

CPython が PEG ベースの新しいパーサを使用するようになりました

関連なし

その他の言語の変更:

__import__()ValueError の代わりに ImportError を送出するようになりました

完了

Python は、コマンドラインで指定されたスクリプトファイル名の絶対パスを取得するようになりました(例: python3 script.py)。__main__ モジュールの __file__ 属性は、相対パスではなく絶対パスになりました

デフォルトでは、最高のパフォーマンスのために、errors 引数は最初のエンコード/デコードエラー時にのみチェックされ、空文字列に対しては encoding 引数が無視されることがあります

"".replace("", s, n) は、すべての非ゼロの n に対して、空文字列ではなく s を返すようになりました。これは "".replace("", s) と一貫しています

任意の有効な式をデコレータとして使用できるようになりました。以前は、文法ははるかに制限的でした

aclose() / asend() / athrow() の並行実行が禁止され、ag_running が非同期ジェネレータの実際の実行状態を反映するようになりました

__iter__ メソッドの呼び出しにおける予期しないエラーが、in 演算子や operator モジュールの関数 contains()、indexOf()、countOf() において TypeError によってマスクされなくなりました

括弧で囲まれていないラムダ式は、内包表記やジェネレータ式の if 節の式部分として使用できなくなりました

組み込みモジュールの変更:

asyncio

重大なセキュリティ上の懸念のため、asyncio.loop.create_datagram_endpoint() の reuse_address パラメータはサポートされなくなりました

デフォルトエクゼキュータのシャットダウンをスケジュールし、ThreadPoolExecutor のクローズ完了を待機する新しいコルーチン shutdown_default_executor() が追加されました。また、asyncio.run() がこの新しいコルーチンを使用するように更新されました。

プロセスのファイルディスクリプタをポーリングする Linux 固有の子ウォッチャー実装である asyncio.PidfdChildWatcher が追加されました

新しい coroutine asyncio.to_thread() が追加されました

タイムアウトによりタスクをキャンセルする際、asyncio.wait_for() は、正のタイムアウトの場合と同様に、timeout が <= 0 の場合でもキャンセルが完了するまで待機するようになりました

asyncio は、ssl.SSLSocket ソケットで互換性のないメソッドを呼び出した場合に TyperError を送出するようになりました

gc

ガベージコレクションは、復活したオブジェクトでブロックしなくなりました

オブジェクトがガベージコレクタによってファイナライズされたかどうかを確認する新しい関数 gc.is_finalized() が追加されました

math

math.gcd() 関数が複数の引数を扱えるように拡張されました。以前は 2 つの引数のみをサポートしていました

math.lcm() が追加されました: 指定された引数の最小公倍数を返します

math.nextafter() が追加されました: x から y に向かう次の浮動小数点値を返します

math.ulp() が追加されました: 浮動小数点数の最下位ビットの値を返します

os

Linux 固有の os.pidfd_open()os.P_PIDFD が公開されました

os.unsetenv() 関数が Windows でも利用可能になりました

完了

os.putenv()os.unsetenv() 関数が常に利用可能になりました

完了

os.waitstatus_to_exitcode() 関数が追加されました: wait ステータスを終了コードに変換します

random

新しい random.Random.randbytes メソッドが追加されました: ランダムバイトを生成します

sys

新しい sys.platlibdir 属性が追加されました: プラットフォーム固有のライブラリディレクトリの名前です

以前は、sys.stderr は非対話的な場合にブロックバッファリングされていました。現在、stderr はデフォルトで常に行バッファリングされます

注記