Python 3.6

Python 3.6 beta 1 は 2016 年 9 月 12 日にリリースされました。新機能の概要は以下を参照してください。

新しい構文機能

ステータス

PEP 498

リテラル文字列フォーマット

完了

PEP 515

数値リテラル中のアンダースコア

完了

PEP 525

非同期ジェネレータ

PEP 526

変数アノテーションの構文(暫定)

完了

PEP 530

非同期内包表記

新しい組み込み機能

PEP 468

関数における kwargs の順序の保持

PEP 487

クラス生成のより簡単なカスタマイズ

部分的 [1]

PEP 520

クラス属性の定義順序の保持

標準ライブラリの変更

PEP 495

ローカル時刻の曖昧性解消

PEP 506

標準ライブラリへの secrets モジュールの追加

PEP 519

ファイルシステムパスプロトコルの追加

CPython の内部実装

PEP 509

dict へのプライベートバージョンの追加

対応しない

PEP 523

CPython へのフレーム評価 API の追加

Linux/Windows の変更

PEP 524

Linux(システム起動中)で os.urandom() をブロックするように変更

PEP 528

Windows コンソールのエンコーディングを UTF-8 に変更

PEP 529

Windows ファイルシステムのエンコーディングを UTF-8 に変更

その他の言語の変更:

global または nonlocal 文は、同じスコープ内で対象の名前が最初に使用される前に、構文上で出現していなければならなくなりました。以前はこれは SyntaxWarning でした。

特殊メソッドを None に設定することで、対応する操作が利用できないことを示せるようになりました。たとえば、クラスが __iter__()None に設定すると、そのクラスは反復可能ではなくなります。

繰り返されるトレースバック行が長く連続する場合、[Previous line repeated {count} more times] のように省略されるようになりました。

モジュールが見つからない場合、import は新しい例外 ModuleNotFoundError を送出するようになりました。現在 ImportError を(try-except で)チェックしているコードは引き続き動作します。

引数なしの super() に依存するクラスメソッドが、クラス生成中にメタクラスのメソッドから呼び出された場合に正しく動作するようになりました。

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

array

array.array の使い切られたイテレータは、反復対象の配列が拡張された場合でも、使い切られた状態を保つようになりました。

binascii

b2a_base64() 関数は、戻り値に改行文字を付加するかどうかを制御するためのオプションの newline キーワード引数を受け付けるようになりました。

完了

cmath

新しい cmath.tau (τ) 定数が追加されました。

新しい定数として、math.infmath.nan に対応する cmath.infcmath.nan が、また複素数の repr で使用される形式に対応する cmath.infjcmath.nanj が追加されました。

collections

サイズを持つ反復可能なコンテナクラスを表す新しい抽象基底クラス Collection が追加されました。

新しい Reversible 抽象基底クラスは、__reversed__() メソッドも提供する反復可能なクラスを表します。

新しい AsyncGenerator 抽象基底クラスは、非同期ジェネレータを表します。

namedtuple() 関数は、オプションのキーワード引数 module を受け付けるようになりました。指定された場合、返される名前付きタプルクラスの __module__ 属性に使用されます。

namedtuple() の verbose および rename 引数はキーワード専用になりました。

再帰的な collections.deque インスタンスを pickle 化できるようになりました。

hashlib

BLAKE2 ハッシュ関数がモジュールに追加されました。blake2b()blake2s() は常に利用可能で、BLAKE2 のすべての機能セットをサポートしています。

SHA-3 ハッシュ関数 sha3_224()sha3_256()sha3_384()sha3_512()、および SHAKE ハッシュ関数 shake_128()shake_256() が追加されました。

パスワードベースの鍵導出関数 scrypt() が、OpenSSL 1.1.0 以降で利用可能になりました。

json

json.load()json.loads() がバイナリ入力をサポートするようになりました。エンコードされた JSON は UTF-8、UTF-16、または UTF-32 のいずれかで表現する必要があります。

math

新しい math.tau (τ) 定数が追加されました。

完了

os

新しい close() メソッドにより、scandir() イテレータを明示的にクローズできるようになりました。scandir() イテレータはコンテキストマネージャプロトコルをサポートするようになりました。

Linux では、セキュリティを高めるため、os.urandom() はシステムの urandom エントロピープールが初期化されるまでブロックするようになりました。

Linux の getrandom() システムコール(ランダムバイトの取得)が、新しい os.getrandom() 関数として公開されました。

re

正規表現における修飾子スパンのサポートが追加されました。例: '(?i:p)ython' は 'python' と 'Python' にマッチしますが 'PYTHON' にはマッチしません。'(?i)g(?-i:v)r''GvR''gvr' にマッチしますが 'GVR' にはマッチしません。

マッチオブジェクトのグループに __getitem__ でアクセスできるようになり、これは group() と等価です。したがって mo['name']mo.group('name') と等価になりました。

マッチオブジェクトは、グループインデックスとしてインデックスのようなオブジェクトをサポートするようになりました。

socket

ioctl() 関数が SIO_LOOPBACK_FAST_PATH 制御コードをサポートするようになりました。

getsockopt() の定数 SO_DOMAINSO_PROTOCOLSO_PEERSEC、および SO_PASSSEC がサポートされるようになりました。

setsockopt()setsockopt(level, optname, None, optlen: int) の形式をサポートするようになりました。

socket モジュールが、Linux カーネルの暗号 API とインターフェースするためのアドレスファミリ AF_ALG をサポートするようになりました。ALG_SOL_ALG、および sendmsg_afalg() が追加されました。

新しい Linux 定数 TCP_USER_TIMEOUTTCP_CONGESTION が追加されました。

ssl

ssl は OpenSSL 1.1.0 をサポートします。推奨される最小バージョンは 1.0.2 です。

3DES がデフォルトの暗号スイートから削除され、ChaCha20 Poly1305 暗号スイートが追加されました。

SSLContext は、オプションと暗号についてより優れたデフォルト設定を備えています。

新しい SSLSession クラスを使用して、あるクライアント側接続から別の接続へ SSL セッションをコピーできるようになりました。TLS セッションの再開により、初回ハンドシェイクを高速化し、レイテンシを削減し、パフォーマンスを向上させることができます。

新しい get_ciphers() メソッドを使用して、暗号の優先度順に有効な暗号のリストを取得できます。

すべての定数とフラグが IntEnumIntFlags に変換されました。

SSLContext 用のサーバー側およびクライアント側固有の TLS プロトコルが追加されました。

TLS 1.3 のハンドシェイク後認証を有効にする SSLContext.post_handshake_auth と、それを開始する ssl.SSLSocket.verify_client_post_handshake() が追加されました。

struct

'e' フォーマット指定子を介して IEEE 754 半精度浮動小数点数をサポートするようになりました。

sys

新しい getfilesystemencodeerrors() 関数は、Unicode ファイル名とバイト列ファイル名の間の変換に使用されるエラーモードの名前を返します。

zlib

compress()decompress() 関数がキーワード引数を受け付けるようになりました。

注記