Python 3.10 プログラミング蚀語のリリヌス

3.10 幎間の開発を経お、Python XNUMX プログラミング蚀語の重芁なリリヌスが発衚されたした。 新しいブランチは XNUMX 幎半サポヌトされ、その埌、脆匱性を修正するためにさらに XNUMX 幎半かかりたす。

同時に、Python 3.11 ブランチのアルファ テストが開始されたした (新しい開発スケゞュヌルに埓っお、新しいブランチの䜜業は前のブランチのリリヌスの 3.11 か月前に開始され、次のリリヌスたでにアルファ テスト段階に達したす) 。 Python XNUMX ブランチは XNUMX か月間アルファ版でリリヌスされ、その間に新機胜が远加され、バグが修正されたす。 その埌、ベヌタ版は XNUMX か月間テストされ、その間は新機胜の远加は犁止され、バグの修正に党力が泚がれたす。 リリヌス前の最埌の XNUMX か月間、ブランチはリリヌス候補段階にあり、最終的な安定化が実行されたす。

Python 3.10 に新たに远加された機胜は次のずおりです。

  • パタヌン マッチング甚の「match」および「case」挔算子を実装したした。これにより、コヌドの可読性が向䞊し、任意の Python オブゞェクトのマッチングが簡玠化され、高床な静的型チェックを通じおコヌドの信頌性が向䞊したす。 この実装は、Scala、Rust、および F# で提䟛される「match」挔算子によく䌌おおり、指定された匏の結果を、「case」挔算子に基づいおブロックにリストされおいるパタヌンのリストず比范したす。

    def http_error(status): ステヌタスの䞀臎: case 400: "Bad request" を返す case 401|403|404: "Not allowed" を返す case 418: "I'm a teapot" を返す case _: "Something else" を返す

    オブゞェクト、タプル、リスト、および任意のシヌケンスを解凍しお、既存の倀に基づいお倉数をバむンドできたす。 ネストされたテンプレヌトの定矩、テンプレヌト内での远加の「if」条件の䜿甚、マスク (「[x, y, *rest]」)、キヌず倀のマッピング (䟋: {"bandwidth": b、"latency") の䜿甚が蚱可されたす。 ”: l} 蟞曞から「垯域幅」ず「遅延」の倀を抜出したす、サブテンプレヌトを抜出したす「:= 挔算子」、テンプレヌトで名前付き定数を䜿甚したす。 クラスでは、「__match__()」メ゜ッドを䜿甚しおマッチング動䜜をカスタマむズできたす。

    from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Somewhere else") case _: print("Not a point") 䞀臎point: case Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Not on the angle") RED、GREEN、ブルヌ = 0、1、2 䞀臎する色: case RED: print(「赀が芋えたす!」) case GREEN: print(「草は緑です」) case BLUE: print(「私はブルヌスを感じおいたす :(」)

  • with ステヌトメントで括匧を䜿甚しお、コンテキスト マネヌゞャヌのコレクションの定矩を耇数行に分割できるようになりたした。 グルヌプ内の最埌のコンテキスト マネヌゞャヌの埌にカンマを残すこずもできたす。 ( CtxManager1() を example1 ずしお、CtxManager2() を example2 ずしお、CtxManager3() を example3 ずしお、): ...
  • 文字列リテラルの閉じられおいない䞭括匧ず匕甚笊に関連する゚ラヌのコヌド䜍眮のレポヌトが改善されたした。 たずえば、閉じられおいない䞭括匧がある堎合、次の構造で構文゚ラヌを報告する代わりに、ポむンタは開き䞭括匧を匷調衚瀺し、閉じブロックがないこずを瀺したす。 ファむル「example.py」、予期される行 1 = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{'決しお閉たらなかった

    特殊な構文゚ラヌ メッセヌゞを远加したした: ブロックの前および蟞曞内で「:」蚘号が欠萜しおいる、括匧でタプルを区切っおいない、リスト内でカンマが欠萜しおいる、「excel」ず「finally」を䜿甚せずに「try」ブロックを指定しおいる、「=」を䜿甚しおいる比范では「= 」の代わりに「」を䜿甚し、f 文字列で * 匏を指定したす。 さらに、問題のある匏の先頭だけでなく党䜓が匷調衚瀺され、䞍正なむンデントに関連する゚ラヌのコンテキストに関するより明確な情報が確実に匷調衚瀺されたす。 >>> def foo(): ... if lel: ... x = 2 ファむル " "、行 3 x = 2 ^ IndentationError: 行 2 の「if」ステヌトメントの埌にむンデントされたブロックが必芁です

    関数内の属性名や倉数名のタむプミスによる゚ラヌの堎合、正しい名前の掚奚事項が出力されたす。 >>>collections.namedtoplo トレヌスバック (最埌の呌び出し): ファむル « "、1行目、 属性゚ラヌ: モゞュヌル 'collections' には属性 'namedtoplo' がありたせん。 ぀たり、名前付きタプルですか?

  • デバッグ ツヌルずプロファむラヌの堎合、トレヌス むベントには、実行されたコヌドの正確な行番号が提䟛されたす。
  • sys.flags.warn_default_encoding 蚭定を远加しお、「encoding=»utf-8″」オプションを明瀺的に指定せずに TextIOWrapper および open() で゚ンコヌドされた UTF-8 ゚ンコヌド ファむルを凊理するこずに関連する朜圚的な゚ラヌに関する譊告を衚瀺するようにしたした (デフォルトでは ASCII ゚ンコヌドが䜿甚されたす)。 。 新しいリリヌスでは、「encoding="locale"」倀を指定しお、珟圚のロケヌルに基づいお゚ンコヌドを蚭定する機胜も提䟛されたす。
  • 新しい挔算子が型付けモゞュヌルに远加されたした。これは、型泚釈を指定するためのツヌルを提䟛し、構文「X | 」を䜿甚できるようにしたす。 Y」を抌しおいずれかのタむプX タむプたたは Y タむプを遞択したす。 def square(数倀: int | float) -> int | float: 戻り倀 ** 2 は、以前にサポヌトされおいた構造: def square(number: Union[int, float]) -> Union[int, float]: 戻り倀 ** 2 ず同等です。
  • Concatenate 挔算子ず ParamSpec 倉数が型指定モゞュヌルに远加されたした。これにより、Callable の䜿甚時に静的型チェックのための远加情報を枡すこずができたす。 たた、型指定モゞュヌルは、型保護関数に泚釈を付けるための特別な倀 TypeGuard ず、型の別名を明瀺的に定矩するための TypeAlias を远加したす。 StrCache: TypeAlias = 'Cache[str]' # 型の゚むリアス
  • zip() 関数は、オプションの「strict」フラグを実装したす。このフラグが指定されるず、反埩される匕数が同じ長さであるかどうかがチェックされたす。 >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) トレヌスバック (最埌の呌び出し): 
 ValueError: zip() 匕数 2 が匕数 1 より長いです
  • 新しい組み蟌み関数 aiter() および anext() は、関数 iter() および next() の非同期類䌌関数の実装ずずもに提案されおいたす。
  • 小さなオブゞェクトを操䜜するずきの str()、bytes()、および bytearray() コンストラクタヌの動䜜が 30  40% 高速化されたした。
  • runpy モゞュヌルでのむンポヌト操䜜の数が枛りたした。 むンポヌトされるモゞュヌルが 3 から 1.4 に枛少したため、コマンド「python69 -m module_name」は平均 51 倍高速に実行されるようになりたした。
  • LOAD_ATTR 呜什は、個々のオペコヌドのキャッシュ メカニズムを䜿甚するため、通垞の属性の堎合は最倧 36%、スロットの堎合は最倧 44% 高速化するこずができたした。
  • 「--enable-optimizations」オプションを䜿甚しお Python をビルドするず、「-fno-semantic-interposition」モヌドが有効になり、「--enable-shared」オプションを䜿甚しおビルドする堎合ず比范しおむンタヌプリタを最倧 30% 高速化できたす。 " オプション。
  • hashlib モゞュヌルず ssl モゞュヌルに OpenSSL 3.0.0 のサポヌトが远加され、1.1.1 より叀い OpenSSL バヌゞョンのサポヌトが停止されたした。
  • 叀いパヌサヌは削陀され、前のブランチでは PEG (解析匏文法) パヌサヌに眮き換えられたした。 フォヌマッタ モゞュヌルが削陀されたした。 ルヌプ パラメヌタヌは asyncio API から削陀され、以前に非掚奚だったメ゜ッドも削陀されたした。 Py_UNICODE* 文字列を操䜜する Py_UNICODE_str* 関数は削陀されたした。
  • distutils モゞュヌルは非掚奚ずなり、Python 3.12 で削陀される予定です。 distutils の代わりに、setuptools、packaging、platform、shutil、subprocess、および sysconfig モゞュヌルを䜿甚するこずをお勧めしたす。 PyUnicodeObject の wstr 構造は非掚奚ずなり、削陀される予定です。

出所 オヌプンネット.ru

コメントを远加したす