XNUMX年半の開発期間を経て
追加されたものの中で、
-
サポート 複雑な式内の代入演算。 新しい「:=」演算子を使用すると、他の式内で値の割り当て操作を実行できます。たとえば、条件付きステートメントやループを定義する際の二重関数呼び出しを回避できます。if (n := len(a)) > 10:
...while (ブロック := f.read(256)) != ":
... -
サポート 関数の引数を指定するための新しい構文。 関数定義時に引数を列挙する際、関数呼び出し時に値が列挙される順序に基づいて値のみを代入できる引数と、代入可能な引数を「/」で区切ることができるようになりました任意の順序 (変数=値の構文) )。 実際的な面では、この新機能により、Python の関数は C の既存の関数の動作を完全にエミュレートでき、また、パラメーター名が将来変更される予定がある場合など、特定の名前へのバインドを回避することもできます。「/」フラグは、前に追加した「*」フラグを補完し、「変数=値」の形式での代入のみが適用される変数を区切ります。 たとえば、関数「def f(a, b, /, c, d, *, e, f):」では、変数「a」と「b」は値がリストされている順序でのみ代入できます。 、
変数「e」と「f」は「variable=value」の代入によってのみ、変数「c」と「d」は次のいずれかの方法で取得できます。f(10、20、30、40、e=50、f=60)
f(10, 20, s=30, d=40, e=50, f=60) -
追加した 新しい C API
Python 初期化パラメータを設定し、すべてを完全に制御できるようにします。構成 高度なエラー処理機能を提供します。 提案された API を使用すると、Python インタープリター機能を他の C アプリケーションに簡単に埋め込むことができます。 -
実装済み C 言語で書かれたオブジェクトへのアクセスを高速化するための新しい Vectorcall プロトコル。 CPython 3.8 では、Vectorcall へのアクセスは依然として内部使用に限定されていますが、CPython 3.9 では公的にアクセス可能な API のカテゴリへの移行が計画されています。 -
追加した 実行時監査フックへの呼び出し。これにより、Python のアプリケーションとフレームワークに、実行されたアクションを監査するスクリプトの進行状況に関する低レベルの情報へのアクセスが提供されます (たとえば、モジュールのインポート、ファイルのオープン、トレースの使用などを追跡できます)。ネットワークソケットへのアクセス、exec、eval、run_mod によるコードの実行); - モジュール内
ピクルス 提供された オブジェクトのシリアル化と逆シリアル化に使用される Pickle 5 プロトコルのサポート。 Pickle を使用すると、メモリ コピー操作の数を減らし、データ固有の圧縮アルゴリズムの使用などの追加の最適化手法を適用することで、マルチコアおよびマルチノード構成の Python プロセス間の大量のデータの転送を最適化できます。 プロトコルの XNUMX 番目のバージョンは、メインの pickle ストリームとは別にデータを送信できる帯域外送信モードが追加されたことで注目に値します。 - デフォルトでは、Pickle プロトコルの XNUMX 番目のバージョンがアクティブ化されます。これにより、以前にデフォルトで提供されていた XNUMX 番目のバージョンと比較して、パフォーマンスが向上し、送信データのサイズが削減されます。
- モジュール内
タイプ いくつかの新機能が導入されています。 - 別の FS ツリーに保存され、コードが含まれるディレクトリから分離された、バイトコードを含むコンパイル済みファイルにキャッシュを割り当てる機能が追加されました。 バイトコードを含むファイルを保存するためのパスは変数を介して設定されます
PythonPYCACHEPREFIX またはオプション「-X pycache_prefix」; -
実装済み リリースと同一の ABI を使用する Python のデバッグ ビルドを作成する機能。これにより、安定リリース用にコンパイルされた SI 言語で書かれた拡張機能をデバッグ ビルドで読み込むことができます。 - f 文字列 (先頭に「f」が付いたフォーマット済みリテラル) は、= 演算子 (「f'{expr=}'」など) のサポートを提供します。これにより、デバッグを容易にするために式をテキストに変換できます。 例えば:
››› ユーザー = 'eric_idle'
››› member_since = 日付(1975, 7, 31)
››› f'{user=} {member_since=}'
「user='eric_idle' member_since=datetime.date(1975, 7, 31)」 - 式 "
続ける » ブロック内での使用が許可されています最後に ; - 新しいモジュールが追加されました
マルチプロセッシング.shared_memory 、マルチプロセス構成で共有メモリセグメントを使用できるようになります。 - Windows プラットフォームでは、asyncio 実装はクラスを使用するように移動されました。
プロアクターイベントループ ; - 新しいオブジェクト コード キャッシュ メカニズムの使用により、LOAD_GLOBAL 命令のパフォーマンスが約 40% 向上しました。
出所: オープンネット.ru