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

XNUMX年間の開発を経て 提示された 重要なプログラミング言語のリリース Pythonの3.9。 Python 3.9 は、その後の最初のリリースでした。 перехода プロジェクト 新しいサイクル リリースの準備とサポート。 新しいメジャー リリースは年に XNUMX 回生成され、修正アップデートは XNUMX か月ごとにリリースされます。 重要な各ブランチは XNUMX 年半サポートされ、その後、脆弱性を修正するためにさらに XNUMX 年半かかります。

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

間で 追加した イノベーション Python 3.9 では:

  • 組み込みの dict クラスを使用して定義された辞書では、 出現した マージ演算子「|」のサポートおよび "|= update" は、辞書を結合するために以前に提案された {**d1, **d2} および dict.update メソッドを補完します。

    >>> x = {"key1": "x からの値 1", "key2": "x からの値 2"}
    >>> y = {"key2": "y からの値 2", "key3": "y からの値 3"}

    >>> × | y
    {'key1': 'x からの value1', 'key2': 'y からの value2', 'key3': 'y からの value3'}

    >>> はい | バツ
    {'key2': 'x からの value2', 'key3': 'y からの value3', 'key1': 'x からの value1'}

  • 型の組み込みコレクションにはリスト、辞書、タプルが含まれており、型付けモジュールからインポートせずに基本型として使用できます。 それらの。 testing.List、typing.Dict、typing.Tuple の代わりに指定できるようになりました。
    リスト、辞書、タプルだけです:

    defgreet_all(names: list[str]) -> なし:
    名前の中の名前の場合:
    print("こんにちは", 名前)

  • 提供されています 関数や変数に注釈を付けるための柔軟なツール。 注釈を添付するために、新しい注釈付きタイプが型付けモジュールに追加され、静的分析または実行時の最適化に使用できる追加のメタデータで既存のタイプを拡張します。 コードからメタデータにアクセスするために、include_extras パラメーターが testing.get_type_hints() メソッドに追加されました。

    charType = Annotated[int, ctype("char")] UnsignedShort = Annotated[int, struct2.ctype('H')]

  • トーンダウン デコレータの文法要件 - if および while ブロックでの使用に適した任意の式をデコレータとして使用できるようになりました。 この変更により、PyQt5 コードの可読性が大幅に向上し、このモジュールのメンテナンスが簡素化されました。

    それは次のとおりです。
    button_0 = ボタン[0] @button_0.clicked.connect

    これで、次のように書くことができます。
    @buttons[0].clicked.connect

  • 標準ライブラリへ 追加されました モジュール ゾーン情報これには、IANA タイム ゾーン データベースからの情報が含まれます。

    >>> ゾーン情報から ZoneInfo をインポート
    >>> from datetime import datetime、timedelta
    >>> # サマータイム
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("アメリカ/ロサンゼルス"))
    >>> 印刷(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

    >>> # 標準時間
    >>> dt += タイムデルタ(日=7)
    >>> 印刷(dt)
    2020-11-07 12:00:00-08:00

    >>> print(dt.tzname())
    PST

  • 追加されたgraphlibモジュールには、 実装されました グラフのトポロジカルソートのサポート。
  • 提案された プレフィックスと行末を削除するための新しいメソッド - str.removeprefix(prefix) と str.removesuffix(suffix)。 str、bytes、bytearray、collections.UserString オブジェクトにメソッドが追加されました。

    >>> s = "FooBar"
    >>> s.removeprefix("Foo")
    'バー'

  • 関与した 新しいパーサー PEG (Parsing Expression Grammar)、パーサーを置き換えたもの LL(1)。 新しいパーサーの使用により、LL(1) の制限を回避するために使用される「ハック」の一部を取り除くことが可能になり、パーサーの保守にかかる人件費が大幅に削減されました。 パフォーマンスの点では、新しいパーサーは以前のパーサーとほぼ同じレベルですが、柔軟性の点では大幅に優れており、新しい言語機能をより自由に設計できるようになります。 古いパーサー コードは今のところ保持されており、「-X oldparser」フラグまたは「PYTHONOLDPARSER=1」環境変数を使用して返すことができますが、リリース 3.10 では削除される予定です。
  • によって提供された C 拡張メソッドが、PyState_FindModule 関数を使用してモジュールの状態を検索する代わりに、直接ポインター逆参照を使用して定義されているモジュールの状態にアクセスできる機能。 この変更により、モジュールの状態をチェックするオーバーヘッドを削減または完全に排除することで、C モジュールのパフォーマンスを向上させることができます。 モジュールをクラスに関連付けるには、C 関数 PyType_FromModuleAndSpec() が提案され、モジュールとその状態を取得するには、C 関数 PyType_GetModule() および PyType_GetModuleState() が提案され、クラスにアクセスするメソッドを提供します。この定義では、C 関数 PyCMethod と METH_METHOD フラグが提案されています。
  • ガベージコレクター 配達されました ファイナライザーの実行後も外部からアクセス可能な状態にある蘇生されたオブジェクトを含むコレクションをロックしないようにします。
  • 追加されたメソッド os.pidfd_openこれにより、Linux カーネル サブシステム「pidfd」を使用して PID 再利用状況を処理できるようになります (pidfd は特定のプロセスに関連付けられており変更されませんが、PID は、その PID に関連付けられた現在のプロセスが終了した後に別のプロセスに関連付けることができます) )。
  • Unicode 仕様のサポートがバージョン 13.0.0 に更新されました。
  • 排除された メモリーリーク 同じプロセスで Python インタープリターを再初期化するとき。
  • 組み込み型の range、tuple、set、frozenset、list、dict のパフォーマンスが最適化されました。 実装された Vectorcall ショートカット プロトコルを使用することで、C 言語で記述されたオブジェクトに高速にアクセスできます。
  • モジュール _abc、audioop、_bz2、_codecs、_contextvars、_crypt、_functools、_json、_locale、operator、resource、time、および _weakref は、次からロードされます。 いくつかの段階での初期化.
  • 標準ライブラリ モジュールの audioop、ast、grp、_hashlib、pwd、_posixsubprocess、random、select、struct、termios、および zlib は、制限付きのライブラリを使用するように変換されました。 安定したABIこれにより、Python のさまざまなバージョンの拡張モジュールのアセンブリの操作性の問題が解決されます (バージョンを更新するときに、拡張モジュールを再構築する必要はなく、3.9 用にコンパイルされたモジュールは 3.10 ブランチで動作します)。
  • asyncio モジュールは、潜在的なセキュリティ問題のため、reuse_address パラメータのサポートを廃止しました (Linux 上の UDP に SO_REUSEADDR を使用すると、さまざまなプロセスがリッスン ソケットを UDP ポートに接続できるようになります)。
  • 新しい最適化が追加されました。たとえば、マルチスレッド アプリケーションでのシグナル ハンドラーのパフォーマンスの向上、FreeBSD 環境でのサブプロセス モジュールの速度の向上、一時変数の割り当ての高速化 (式 "for y in [expr" での変数の割り当て) が行われました。 ]" は、式 "y = expr" ") と同じくらいパフォーマンスが向上しました。 一般に、ほとんどのテストでは、 見せる ブランチ 3.8 と比較してパフォーマンスが低下します (速度向上は write_local テストと write_deque テストでのみ観察されます)。

    Python バージョン 3.4 3.5 3.6 3.7 3.8 3.9
    ————— — — — — — —

    変数および属性の読み取りアクセス:
    読み取りローカル 7.1 7.1 5.4 5.1 3.9 4.0
    read_nonlocal 7.1 8.1 5.8 5.4 4.4 4.8
    読み取りグローバル 15.5 19.0 14.3 13.6 7.6 7.7
    読み取り組み込み 21.1 21.6 18.5 19.0 7.5 7.7
    read_classvar_from_class 25.6 26.5 20.7 19.5 18.4 18.6
    read_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 20.1
    読み取りインスタンス変数 32.4 33.1 28.0 26.3 25.4 27.7
    read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
    read_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
    read_boundメソッド 37.6 37.9 29.6 26.9 27.7 45.9

    変数および属性の書き込みアクセス:
    write_local 8.7 9.3 5.5 5.3 4.3 4.2
    write_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
    write_global 19.7 21.2 18.0 18.0 15.8 17.2
    write_classvar 92.9 96.0 104.6 102.1 39.2 43.2
    write_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
    write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    データ構造読み取りアクセス:
    読み取りリスト 24.2 24.5 20.8 20.8 19.0 21.1
    読み取りデキュー 24.7 25.5 20.2 20.6 19.8 21.6
    read_dict 24.3 25.7 22.3 23.0 21.0 22.5
    read_strdict 22.6 24.3 19.5 21.2 18.9 21.6

    データ構造書き込みアクセス:
    書き込みリスト 27.1 28.5 22.5 21.6 20.0 21.6
    write_deque 28.7 30.1 22.7 21.8 23.5 23.2
    write_dict 31.4 33.3 29.3 29.2 24.7 27.8
    write_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    スタック (またはキュー) 操作:
    リスト追加ポップ 93.4 112.7 75.4 74.2 50.8 53.9
    deque_append_pop 43.5 57.0 49.4 49.2 42.5 45.5
    deque_append_popleft 43.7 57.3 49.7 49.7 42.8 45.5

    タイミングループ:
    ループオーバーヘッド 0.5 0.6 0.4 0.3 0.3 0.3

  • 削除されました html.parser.HTMLParser の unescape() メソッドを含む、以前に非推奨となり、前のリリースで DeprecationWarning が発生した多くの Python 2.7 関数とメソッド。
    array.array の tostring() と fromstring()、threading.Thread の isAlive()、ElementTree の getchildren() と getiterator()、sys.getcheckinterval()、sys.setcheckinterval()、asyncio.Task.current_task()、 asyncio.Task.all_tasks()、base64.encodestring()、base64.decodestring()。

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

コメントを追加します