Python 3.5の新しい言語機能とライブラリモジュール
Python 3.5がリリースされた。いくつかの新しい構文、新しいライブラリモジュール、標準ライブラリおよびセキュリティに対する改善など、数多くの変更が含まれている。
構文
Python 3.5に導入された3つの新しい構文:
-
async-await構文を使ったコルーチン。開発者はまるでシーケンシャルであるかのようにコードを書くことができる。実際には、コンパイラはそれを一連のコルーチンで実装し、効果的に並列化する。次の例では、複数の
await
文がシーケンシャルに実行されるように見えるが、実際にブロックすることはない。async def read_data(db): data = await db.fetch('SELECT ...') if (data...) await api.send(data ...')
-
行列乗算演算子。行列の乗算が
a @ b
で表現できるようになる。これを使うと次のように書ける。S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)
S = dot((dot(H, beta) - r).T, dot(inv(dot(dot(H, V), H.T)), dot(H, beta) - r))
-
アンパッキングの一般化。
*
アンパッキング演算子を使用を拡張する。関数呼び出しやタプル内部で複数回使える。>>> print(*[1], *[2], 3) 1 2 3 >>> dict(**{'x': 1}, y=2, **{'z': 3}) {'x': 1, 'y': 2, 'z': 3} >>> *range(4), 4 (0, 1, 2, 3, 4)
ライブラリモジュール
Python 3.5に導入された新しいライブラリモジュール:
- 型ヒントは、サードパーティモジュールに対する型チェックアノテーションを可能にする。必要に応じて、変更なしの実行も許す。
- 新しい
zipapp
モジュールは、実行可能なPython Zip Applicationを作成するためのAPIとコマンドラインツールを提供する。
Python 3.5に含まれるその他の変更:
- パフォーマンスを大幅に改善する、
collections.OrderedDict
とfunctools.lru_cache()
の新しいC実装 - 高速なディレクトリ走査を可能する、新しい
os.scandir()
加えて、SSLv3はデフォルトで無効になる。もし必要なら有効にすることもできる。