このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

Python 3.10

Python 3.10.0 (final) は 2021年10月4日にリリースされました。3.10 の機能は PEP 619 で定義されており、変更点の詳しい説明は What's New in Python 3.10 にあります。

新しい構文機能

状態

PEP 634

構造的パターンマッチング: 仕様

[1]

PEP 635

構造的パターンマッチング: 動機と根拠

[1]

PEP 636

構造的パターンマッチング: チュートリアル

[1]

bpo-12782

括弧で囲んだコンテキストマネージャが正式に許可されました

標準ライブラリの新機能

PEP 618

zip への省略可能な長さチェックの追加

インタプリタの改善

PEP 626

デバッグやその他のツールのための正確な行番号

型付けの新機能

PEP 604

共用体型を X | Y と書けるようにする

PEP 613

明示的な型エイリアス

PEP 612

パラメータ仕様変数

重要な非推奨化、削除、制限

PEP 644

OpenSSL 1.1.1 以降を必須にする

PEP 632

distutils モジュールを非推奨にする。

関係なし

PEP 623

PyUnicodeObject の wstr メンバを非推奨にし、削除の準備をする。

関係なし

PEP 624

Py_UNICODE のエンコーダ API を削除

関係なし

PEP 597

省略可能な EncodingWarning の追加

その他の言語の変更:

int 型に新しいメソッド int.bit_count() が追加されました。これは、与えられた整数を2進展開したときの1の個数(ポピュレーションカウントとも呼ばれます)を返します。

dict.keys() 、 dict.values() 、 dict.items() が返すビューはすべて mapping 属性を持つようになりました。この属性は、元の辞書をラップした types.MappingProxyType オブジェクトを返します。

PEP 618: zip() 関数に省略可能な strict フラグが追加されました。これは、すべてのイテラブルの長さが等しいことを要求するために使います。

整数の引数を取る組み込み関数と拡張関数は、 Decimal や Fraction など、損失なしには整数に変換できないオブジェクト(たとえば __int__() メソッドは持つが __index__() メソッドを持たないもの)を受け付けなくなりました。

object.__ipow__() が NotImplemented を返した場合、演算子は期待どおり object.__pow__() と object.__rpow__() に正しくフォールバックするようになりました。

代入式が、集合リテラルと集合内包表記の中、およびシーケンスのインデックス(ただしスライスは除く)で、括弧なしで使えるようになりました。

関数に新しい __builtins__ 属性が追加されました。関数の実行時に組み込みシンボルを探す際、 __globals__['__builtins__'] を見る代わりにこの属性が使われます。この属性は、存在すれば __globals__["__builtins__"] から、なければ現在の組み込みから初期化されます。

2つの新しい組み込み関数 aiter() と anext() が追加され、それぞれ iter() と next() の非同期版を提供します。

静的メソッド ( @staticmethod ) とクラスメソッド ( @classmethod ) が、メソッドの属性( __module__ 、 __name__ 、 __qualname__ 、 __doc__ 、 __annotations__ )を継承するようになり、新しい __wrapped__ 属性を持つようになりました。さらに、静的メソッドは通常の関数として呼び出せるようになりました。

複雑なターゲット( PEP 526 で定義された simple name ターゲット以外のすべて)に対するアノテーションは、 from __future__ import annotations のもとでは実行時に何の影響も及ぼさなくなりました。

クラスオブジェクトとモジュールオブジェクトは、空のアノテーション辞書を必要になった時点で遅延生成するようになりました。アノテーション辞書は後方互換性のためオブジェクトの __dict__ に格納されます。これにより __annotations__ を扱う際のベストプラクティスが改善されます。

yield 、 yield from 、 await 、名前付き式からなるアノテーションは、副作用があるため from __future__ import annotations のもとでは禁止されました。

束縛されていない変数、 super() 、その他シンボルテーブルの処理を変えうる式をアノテーションとして使っても、 from __future__ import annotations のもとでは効果を持たなくなりました。

float 型と decimal.Decimal 型のどちらについても、NaN 値のハッシュがオブジェクトの同一性に依存するようになりました。以前は、NaN 値どうしが等しくないにもかかわらず、常に 0 にハッシュされていました。そのため、複数の NaN を含む辞書や集合を作るときにハッシュの衝突が多発し、実行時間が2次的に増大する可能性がありました。

__debug__ 定数を削除しようとすると、( NameError ではなく) SyntaxError が発生するようになりました。

SyntaxError 例外が end_lineno と end_offset 属性を持つようになりました。判定できない場合は None になります。

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

asyncio

不足していた connect_accepted_socket() メソッドを追加。

array

array.array の index() メソッドに、省略可能な start と stop パラメータが追加されました。

gc

gc.get_objects() 、 gc.get_referrers() 、 gc.get_referents() に監査フックを追加。

hashlib

hashlib モジュールは OpenSSL 1.1.1 以降を必要とします。

hashlib モジュールは OpenSSL 3.0.0 を暫定的にサポートします。

pbkdf2_hmac() の純 Python によるフォールバックは非推奨になりました。将来、PBKDF2-HMAC は Python が OpenSSL のサポート付きでビルドされた場合にのみ利用できるようになります。

os

VxWorks RTOS 向けに os.cpu_count() のサポートを追加。

Linux の eventfd2 システムコールをラップする新しい関数 os.eventfd() と関連のヘルパーを追加。

カーネルアドレス空間とユーザーアドレス空間の間でコピーすることなく、2つのファイル記述子間でデータを移動できる os.splice() を追加。ただしファイル記述子の一方はパイプを参照している必要があります。

macOS 向けに O_EVTONLY 、 O_FSYNC 、 O_SYMLINK 、 O_NOFOLLOW_ANY を追加。

platform

freedesktop.org os-release 標準ファイルからオペレーティングシステムの識別情報を取得する platform.freedesktop_os_release() を追加。

socket

例外 socket.timeout は TimeoutError の別名になりました。

IPPROTO_MPTCP で MPTCP ソケットを作成するオプションを追加。

サービス種別 (ToS) や DSCP/ECN のフィールドを受け取るための IP_RECVTOS オプションを追加。

ssl

ssl モジュールは OpenSSL 1.1.1 以降を必要とします。

ssl モジュールは OpenSSL 3.0.0 を暫定的にサポートし、新しいオプション OP_IGNORE_UNEXPECTED_EOF が追加されました。

非推奨の関数や非推奨の定数を使うと DeprecationWarning が発生するようになりました。 ssl.SSLContext.options はデフォルトで OP_NO_SSLv2 と OP_NO_SSLv3 が設定されているため、そのフラグを再度設定しても警告できません。

ssl モジュールのデフォルト設定がより安全になりました。前方秘匿性のない暗号や SHA-1 MAC はデフォルトで無効です。セキュリティレベル 2 では、112 ビット未満の強度しかない弱い RSA、DH、ECC の鍵が禁止されます。 SSLContext の最小プロトコルバージョンはデフォルトで TLS 1.2 になりました。これらの設定は Hynek Schlawack の研究に基づいています。

非推奨のプロトコルである SSL 3.0、TLS 1.0、TLS 1.1 は、公式にはサポートされなくなりました。Python がこれらを積極的にブロックすることはありません。ただし OpenSSL のビルドオプション、ディストリビューションの設定、ベンダーのパッチ、暗号スイートによってハンドシェイクが成功しないことがあります。

ssl.get_server_certificate() 関数に timeout パラメータを追加。

ssl モジュールはヒープ型と多段階初期化を使うようになりました。

新しい検証フラグ VERIFY_X509_PARTIAL_CHAIN が追加されました。

sys

sys.orig_argv 属性を追加。Python の実行ファイルに渡された元のコマンドライン引数のリストです。

標準ライブラリのモジュール名のリストを含む sys.stdlib_module_names を追加。

_thread

_thread.interrupt_main() が、シミュレートするシグナル番号を省略可能な引数として取るようになりました(デフォルトは従来どおり signal.SIGINT です)。

注記