Python 3.11 プログラミング言語のリリース

3.11 年間の開発を経て、Python XNUMX プログラミング言語の重要なリリースが公開されました。 新しいブランチは XNUMX 年半サポートされ、その後さらに XNUMX 年半、脆弱性を除去するための修正が生成されます。

同時に、Python 3.12 ブランチのアルファ テストが開始されました (新しい開発スケジュールに従って、新しいブランチの作業は前のブランチのリリースの 3.12 か月前に開始され、次のリリースまでにアルファ テスト段階に達します) )。 Python XNUMX ブランチは XNUMX か月間アルファ版でリリースされ、その間に新機能が追加され、バグが修正されます。 その後、ベータ版は XNUMX か月間テストされ、その間は新機能の追加は禁止され、バグの修正に全力が注がれます。 リリース前の最後の XNUMX か月間、ブランチはリリース候補段階にあり、最終的な安定化が実行されます。

Python 3.11 に新たに追加された機能は次のとおりです。

  • パフォーマンスを最適化するために多大な取り組みが行われています。 新しいブランチには、関数呼び出しの高速化とインライン展開、標準操作 (x+x、x*x、xx、a[i]、a[i] = z、f(arg)) の高速インタープリターの使用に関連する変更が含まれています。 C( arg)、o.method()、o.attr = z, *seq)、および Cinder および HotPy プロジェクトによって準備された最適化。 負荷の種類に応じて、コードの実行速度が 10 ~ 60% 向上します。 平均して、pyperformance テスト スイートのパフォーマンスは 25% 向上しました。

    バイトコード キャッシュ メカニズムが再設計され、インタープリタの起動時間が 10 ~ 15% 短縮されました。 コードとバイトコードを含むオブジェクトはインタプリタによって静的に割り当てられるようになり、キャッシュから抽出されたバイトコードをアンマーシャリングし、動的メモリに配置されるコードを含むオブジェクトを変換する段階を省略できるようになりました。

  • 診断メッセージで呼び出しトレースを表示するときに、エラーの原因となった式に関する情報を表示できるようになりました (以前は、エラーの原因となった行の部分の詳細は表示されず、行のみが強調表示されていました)。 拡張トレース情報は API を通じて取得することもでき、 codeobject.co_positions() メソッドまたは C API 関数 PyCode_Addr2Location() を使用して、個々のバイトコード命令をソース コード内の特定の位置にマップするために使用できます。 この変更により、ネストされた辞書オブジェクト、複数の関数呼び出し、および複雑な算術式に関する問題のデバッグがはるかに簡単になります。 トレースバック (最新の呼び出しは最後): ファイル "calculation.py"、行 54、結果 = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: ゼロによる除算
  • 例外グループのサポートが追加され、プログラムで複数の異なる例外を一度に生成および処理できるようになりました。 複数の例外をグループ化して一緒に発生させるために、新しい例外タイプ ExceptionGroup および BaseExceptionGroup が提案され、グループ内の個々の例外を強調表示するために「excel*」式が追加されました。
  • add_note() メソッドが BaseException クラスに追加され、例外にテキスト メモを添付できるようになりました。たとえば、例外がスローされたときに利用できないコンテキスト情報を追加できます。
  • 現在のプライベート クラスを表す特別な Self タイプを追加しました。 Self を使用すると、TypeVar を使用するより簡単な方法で、そのクラスのインスタンスを返すメソッドに注釈を付けることができます。 class MyLock: def __enter__(self) -> Self: self.lock() return self
  • LiteralString 型と互換性のある文字列リテラル (つまり、裸の LiteralString 文字列、ただし任意の str 文字列や結合された str 文字列は含まない) のみを含めることができる特別な LiteralString 型を追加しました。 LiteralString 型を使用すると、関数への文字列引数の受け渡しや、SQL クエリやシェル コマンドの文字列を生成する場合など、脆弱性を引き起こす可能性のある文字列の一部の任意の置換を制限できます。 def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> なし: run_query("SELECT * FROM students") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # エラー run_query( # エラー f"SELECT * FROM students WHERE name = {arbitrary_string}" )
  • TypeVarTuple 型が追加され、XNUMX つの型ではなく任意の数の型をカバーする TypeVar とは異なり、変数ジェネリックスの使用が可能になりました。
  • 標準ライブラリには、TOML 形式を解析するための関数を備えた tomllib モジュールが含まれています。
  • 型付き辞書 (TypedDict) の個々の要素を Required ラベルと NotRequired ラベルでマークして、必須フィールドとオプション フィールドを決定することができます (デフォルトでは、total パラメーターが False に設定されていない場合、宣言されたフィールドはすべて必須です)。 class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (年フィールドはオプションです) m3: Movie = {“year”: 2022} # エラー、必須のタイトルフィールドが入力されていません)
  • TaskGroup クラスが asyncio モジュールに追加され、タスクのグループが完了するのを待機する非同期コンテキスト マネージャーが実装されました。 グループへのタスクの追加は、create_task() メソッドを使用して行われます。 async def main(): tg として asyncio.TaskGroup() と非同期: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("両方のタスクが完了しました。」)
  • クラス、メソッド、関数に @dataclass_transform デコレーターを追加しました。指定すると、静的型チェック システムは @dataclasses.dataclass デコレーターを使用しているかのようにオブジェクトを処理します。 以下の例では、CustomerModel クラスは、型をチェックするときに、@dataclasses.dataclass デコレータを備えたクラスと同様に処理されます。 id 変数と name 変数を受け入れる __init__ メソッドがあるものとして。 @dataclass_transform() クラス ModelBase: ... クラス CustomerModel(ModelBase): id: int name: str
  • 正規表現では、原子グループ化 ((?>...)) および所有量指定子 (*+、++、?+、{m,n}+) を使用する機能が追加されました。
  • 「-P」コマンド ライン オプションと PYTHONSAFEPATH 環境変数を追加して、安全でない可能性のあるファイル パスの sys.path への自動添付を無効にしました。
  • Windows プラットフォーム用の py.exe ユーティリティが大幅に改善され、「-V:」構文のサポートが追加されました。 / " に加えて "- 。 」
  • C API の多くのマクロは、通常のまたは静的なインライン関数に変換されます。
  • uu、cgi、pips、crypt、aifc、chunk、msilib、telnetlib、audioop、nis、sndhdr、imghdr、nntplib、spwd、xdrlib、cgitb、mailcap、ossaudiodev、および sunau モジュールは非推奨となり、Python で削除される予定です。 3.13リリース。 PyUnicode_Encode* 関数を削除しました。

出所: オープンネット.ru

コメントを追加します