Python 3.8

Python 3.8.0(最終版)は 2019 年 10 月 14 日にリリースされました。3.8 の機能は PEP 569 で定義されており、変更点の詳細な説明は What's New in Python 3.8. にあります。

機能

ステータス

PEP 570

位置専用引数

PEP 572

代入式

完了

PEP 574

帯域外データを伴う Pickle プロトコル 5

PEP 578

ランタイム監査フック

PEP 587

Python 初期化設定

PEP 590

Vectorcall: CPython のための高速な呼び出しプロトコル

その他

f 文字列が、式の自己文書化やデバッグのための = をサポート

完了

その他の言語の変更:

実装上の問題により、continue 文を finally 節で使用することは不正でした。Python 3.8 ではこの制限が撤廃されました

完了

boolintfractions.Fraction 型に、floatdecimal.Decimal にあるような as_integer_ratio() メソッドが追加されました

intfloatcomplex のコンストラクタは、対応するメソッド __int__()__float__()__complex__() が利用できず、__index__() 特殊メソッドが利用可能な場合に、それを使用するようになりました

正規表現における N{name} エスケープのサポートが追加されました

dict と dictview が、reversed() を使用して挿入順序の逆順で反復可能になりました

関数呼び出しにおけるキーワード名に許される構文がさらに制限されました。特に、f((keyword)=arg) は許可されなくなりました

yield 文と return 文における一般化された反復可能オブジェクトのアンパックは、囲む括弧を必要としなくなりました

[(10, 20) (30, 40)] のようなコードでカンマが抜けている場合、コンパイラは役立つ提案とともに SyntaxWarning を表示します

datetime.date または datetime.datetime のサブクラスと datetime.timedelta オブジェクトとの間の算術演算は、基底クラスではなくサブクラスのインスタンスを返すようになりました

Python インタプリタが Ctrl-C (SIGINT) によって中断され、結果として生じた KeyboardInterrupt 例外がキャッチされなかった場合、Python プロセスは SIGINT シグナルを介して、または呼び出し元プロセスが Ctrl-C によって終了したことを検出できる正しい終了コードで終了するようになりました

一部の高度なプログラミングスタイルでは、既存の関数の types.CodeType オブジェクトを更新する必要があります

整数に対して、pow() 関数の 3 引数形式は、底が法と互いに素である場合に指数を負にできるようになりました

dict 内包表記が dict リテラルと同期され、最初にキーが、次に値が計算されるようになりました

object.__reduce__() メソッドは、2 個から 6 個までの要素を持つタプルを返せるようになりました

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

asyncio

asyncio.run() が暫定 API から安定版 API へ昇格しました

完了

python -m asyncio を実行すると、ネイティブに非同期な REPL が起動します

例外 asyncio.CancelledErrorException ではなく BaseException を継承するようになり、concurrent.futures.CancelledError を継承しなくなりました

完了

asyncio.Task 内のラップされたコルーチンを取得するための asyncio.Task.get_coro() が追加されました

asyncio タスクに名前を付けられるようになりました。asyncio.create_task() または create_task() イベントループメソッドに name キーワード引数を渡すか、タスクオブジェクトの set_name() メソッドを呼び出すことで行えます

asyncio.loop.create_connection() に Happy Eyeballs のサポートが追加されました。動作を指定するため、2 つの新しいパラメータ happy_eyeballs_delay と interleave が追加されました。

gc

get_objects() は、オブジェクトを取得する世代を示すオプションの generation パラメータを受け取れるようになりました。(ただし、gc は組み込みですが、get_objects() は MicroPython では実装されていない点に注意してください)

math

2 点間のユークリッド距離を計算する新しい関数 math.dist() が追加されました

math.hypot() 関数が複数の次元を扱えるように拡張されました

"start" 値(デフォルト: 1)と反復可能な数値の積を返す、sum() に類似した新しい関数 math.prod() が追加されました

2 つの新しい組み合わせ関数 math.perm()math.comb() が追加されました

浮動小数点数への変換なしで正確な整数の平方根を計算する新しい関数 math.isqrt() が追加されました

math.factorial() 関数は、int でない引数を受け付けなくなりました

完了

sys

「送出できない例外」の処理方法を制御するためにオーバーライドできる、新しい sys.unraisablehook() 関数が追加されました