Python 3.8で最高の新機能
5450 ワード
Python 3.8は流行言語の最新バージョンで、スクリプトの作成と自動化から機械学習とWeb開発までのすべての内容に適しています.現在、正式なbetaバージョンで使用可能であり、Python 3.8は多くの巧みな構文変更、メモリ共有、より効果的なシーケンス化と逆シーケンス化、改善された辞書などをもたらしています.
当然、Python 3.8も様々な性能改善をもたらした.全体的な結果は、より速く、より簡潔で、より一致し、より現代的なPythonです.これはPython 3.8の新しい機能と最も重要な機能です.
代入式
Python 3.8で最も顕著な変化は、いわゆる海象演算子(
この例では、変数
付与式はPythonの簡潔明瞭な伝統に従い,リスト理解を含む.ここでのアイデアは、いくつかのPythonプログラミングモードでよく見られる退屈なテンプレートを減らすことです.たとえば、上記のコードフラグメントは、通常、2行以上のコードで表現されます.
位置パラメータのみ
関数定義の新しい構文(位置パラメータのみ)により、開発者は特定のパラメータを位置パラメータのみに強制できます.これにより、関数定義における位置パラメータとキーワードパラメータの曖昧さが解消されます.
位置パラメータのみでシナリオを定義できます.たとえば、関数は任意のキーワードパラメータを受け入れることができますが、1つ以上の位置を受け入れることもできます.Python内蔵関数では、このような状況が頻繁に発生するため、Python開発者にこの操作を独自に実行する方法を提供することで、言語の一貫性を向上させることができます.
Pythonドキュメントの例:
F文字列デバッグのサポート
f文字列フォーマットは、テキストと計算値または変数を同じ式で印刷する便利な(よりパフォーマンスの高い)方法を提供します.
これにより、
f文字列式の末尾に
これにより、
マルチプロセッサ共有メモリ
Python 3.8では、
従来のPythonバージョンでは、データをファイルに書き出し、ネットワークソケットを介してデータを送信したり、Pythonの
共有メモリセグメントは、バイトの元の領域として割り当てることもできるし、Pythonオブジェクト(数値タイプ、文字列、バイトオブジェクト、
タイピングモジュールの改良
Pythonはダイナミックタイプ化されていますが、
Pythonの
NumPyやApache Arrowなどの外部ライブラリは、Pythonバインドで新しい
かぎゃくじしょ
PyPyプロジェクトが提供する新しい実装を用いて、Python 3.6でPythonの辞書を完全に書き換えた.より速く、よりコンパクトなほか、辞書には要素固有のソート方法があります.リストのように追加順にソートされます.Python 3.8では、辞書で
実行時監査フック
PEP 578に記載されているように、ランタイムレビューフックは、CPythonランタイムに実行される機能が検出機能によってPythonコードに表示されることを可能にする.これにより、アプリケーション・パフォーマンス監視ツールは、Pythonアプリケーションの内部実行時に発生するより多くのことを関数呼び出しレベルで表示できます.
構成の初期化
PEP 587は、CPythonの実行時にC APIを介して起動オプションを細粒度制御することを可能にする.これにより、Pythonの起動動作を以前よりも正確にカスタマイズできます.たとえば、Pythonを埋め込みで使用する場合や、アプリケーションとして配布される独立した実行時などです.
パフォーマンスの向上多くの組み込み方法および関数の速度は、それらに伝達されるパラメータの多くが不要に変換されるため、20%〜50%向上した. 新しいオペレーティングコードキャッシュは、解釈器内のいくつかの命令の速度を速めることができる.しかしながら、現在唯一実現されている加速は ファイルコピー操作(例えば、 .現在、新しく作成されたリストは平均12%小さくなっています.これは、リスト構築関数オブジェクトの長さを利用した最適化方法のおかげです(事前に知っていれば). Python 3.8では、新しいクラス(例えば、
Python C APIとCPythonの改良
最新バージョンのPythonでは、CPythonで使用されているC API(C言語で作成されたPythonのリファレンス実装)を再構築する作業がメインとなっている.これまで、この作業ではインクリメンタル変更のみが発生していましたが、これらの合計は次のとおりです. Python初期化構成のための新しいC APIは、Pythonの初期化ルーチンにより厳格な制御およびより詳細なフィードバックを提供することができる.これにより、Pythonの実行時をアプリケーションに簡単に埋め込み、プログラミングで起動パラメータをPythonに渡すことができます.この新しいAPIはまた、すべてのPythonの構成コントロールが、将来の変更(例えば、Pythonの新しいUTF-8モード)を挿入しやすくするために、一貫したホームディレクトリを持っていることを確認することを目的としています. CPython用の別の新しいC API(「ベクトル呼び出し」呼び出しプロトコル)は、呼び出しを処理する一時オブジェクトのオーバーヘッドを作成することなく、内部Pythonメソッドをより迅速に呼び出すことができる.このAPIは依然として不安定であるが、一時的に利用可能である.Python 3.9から完成する予定です. Pythonランタイム監査フックPythonランタイムには、イベントをフックし、テストフレームワークやログ記録、監査システムなどの外部ツールにイベントを表示するための2つのAPIが用意されています.
どこでPython 3.8をダウンロードします
Python Software FoundationからPython 3.8 betaをダウンロードできます.
From: https://www.infoworld.com/article/3400640/the-best-new-features-in-python-38.html
当然、Python 3.8も様々な性能改善をもたらした.全体的な結果は、より速く、より簡潔で、より一致し、より現代的なPythonです.これはPython 3.8の新しい機能と最も重要な機能です.
代入式
Python 3.8で最も顕著な変化は、いわゆる海象演算子(
:=
)を使用する付与式である.付与式では、独立した文として変数に値を割り当てるのではなく、式のコンテキストで変数に値を割り当てることができます.まだ存在しない変数もあります.while (line := file.readline()) != "end":
print(chunk)
この例では、変数
line
が存在しない場合、line
が作成され、file.readline()
から値が割り当てられる.次に、line
が"end"
に等しいかどうかを確認します.そうでない場合は、次の行を読み出し、line
に格納してテストを行います.付与式はPythonの簡潔明瞭な伝統に従い,リスト理解を含む.ここでのアイデアは、いくつかのPythonプログラミングモードでよく見られる退屈なテンプレートを減らすことです.たとえば、上記のコードフラグメントは、通常、2行以上のコードで表現されます.
位置パラメータのみ
関数定義の新しい構文(位置パラメータのみ)により、開発者は特定のパラメータを位置パラメータのみに強制できます.これにより、関数定義における位置パラメータとキーワードパラメータの曖昧さが解消されます.
位置パラメータのみでシナリオを定義できます.たとえば、関数は任意のキーワードパラメータを受け入れることができますが、1つ以上の位置を受け入れることもできます.Python内蔵関数では、このような状況が頻繁に発生するため、Python開発者にこの操作を独自に実行する方法を提供することで、言語の一貫性を向上させることができます.
Pythonドキュメントの例:
def pow(x, y, z=None, /):
r = x**y
if z is not None:
r %= z
return r
/
位置パラメータとキーワードパラメータとを分離する.この例では、すべてのパラメータが位置パラメータです.従来のPythonバージョンでは、z
がキーワードパラメータとして扱われていた.以上の関数定義が与えられると、pow(2, 10)
およびpow(2, 10, 5)
は有効な呼び出しであるが、pow(2, 10, z=5)
は有効な呼び出しではない.F文字列デバッグのサポート
f文字列フォーマットは、テキストと計算値または変数を同じ式で印刷する便利な(よりパフォーマンスの高い)方法を提供します.
x = 3
print(f'{x+1}')
これにより、
4
が生成される.f文字列式の末尾に
=
を追加すると、f文字列式自体のテキストが印刷され、値が続く.x = 3
print (f'{x+1=}')
これにより、
x+1=4
が生成される.マルチプロセッサ共有メモリ
Python 3.8では、
multiprocessing
モジュールは、メモリ領域を作成し、異なるPythonプロセス間で共有できるSharedMemory
クラスを提供します.従来のPythonバージョンでは、データをファイルに書き出し、ネットワークソケットを介してデータを送信したり、Pythonの
pickle
モジュールを使用してシーケンス化したりしてから、プロセス間でデータを共有することができた.共有メモリは、プロセス間でデータを転送するためのより高速なパスを提供し、Pythonが複数のプロセッサとプロセッサコアをより効率的に使用できるようにします.共有メモリセグメントは、バイトの元の領域として割り当てることもできるし、Pythonオブジェクト(数値タイプ、文字列、バイトオブジェクト、
None
オブジェクト)の一部を格納する可変の類似リストのオブジェクトを使用することもできます.タイピングモジュールの改良
Pythonはダイナミックタイプ化されていますが、
typing
モジュールの使用タイププロンプトをサポートし、サードパーティのツールがPythonプログラムを検証できるようにします.Python 3.8はtyping
に新しい要素を追加し、より丈夫な検査を可能にした.final
デコレーションおよびFinal
タイプの注釈は、いつでも上書きすべきではないことを示し、注釈または装飾/注釈付きオブジェクトを再割り当てします.Literal
型は、式を特定の値または値リストに制限し、必ずしも同じタイプではない.TypedDict
タイプを使用すると、特定のキーに関連付けられた値を1つ以上の特定のタイプに制限する辞書を作成できます.これらの制限は、実行時ではなくコンパイル時に決定された制限に限定されることに注意してください.pickle
プロトコルの新しいバージョンPythonの
pickle
モジュールは、Pythonデータ構造をシーケンス化および逆シーケンス化する方法を提供し、例えば、辞書をそのままファイルに保存し、後で再ロードすることを可能にする.異なるバージョンのPythonでは、異なるレベルのpickle
プロトコルがサポートされていますが、最新バージョンでは、より広範な機能とより効率的なシーケンス化がサポートされています.pickle
リリース5(Python 3.8とともに提供される)は、Pythonバッファ・プロトコルを実装するオブジェクト(バイト、メモリ・ビュー、またはNumPy配列など)をpickleする新しい方法を提供します.新しいpickle
は、このようなオブジェクトのために作成する必要があるメモリコピーの数を減らします.NumPyやApache Arrowなどの外部ライブラリは、Pythonバインドで新しい
pickle
プロトコルをサポートしています.新しいpickle
は、PyPIのPython 3.6とPython 3.7の添付ファイルとしても使用できます.かぎゃくじしょ
PyPyプロジェクトが提供する新しい実装を用いて、Python 3.6でPythonの辞書を完全に書き換えた.より速く、よりコンパクトなほか、辞書には要素固有のソート方法があります.リストのように追加順にソートされます.Python 3.8では、辞書で
reversed()
を使用できます.実行時監査フック
PEP 578に記載されているように、ランタイムレビューフックは、CPythonランタイムに実行される機能が検出機能によってPythonコードに表示されることを可能にする.これにより、アプリケーション・パフォーマンス監視ツールは、Pythonアプリケーションの内部実行時に発生するより多くのことを関数呼び出しレベルで表示できます.
構成の初期化
PEP 587は、CPythonの実行時にC APIを介して起動オプションを細粒度制御することを可能にする.これにより、Pythonの起動動作を以前よりも正確にカスタマイズできます.たとえば、Pythonを埋め込みで使用する場合や、アプリケーションとして配布される独立した実行時などです.
パフォーマンスの向上
LOAD_GLOBAL
のオペレーティングコードに対して行われ、現在は40%加速されている.より高いバージョンのPythonについても同様の最適化を計画している.shutil.copyfile()
およびshutil.copytree()
は、プラットフォーム固有の呼び出しおよびその他の最適化を使用して、操作速度を速める.class A(object)
)のクラス変数の書き込みがずっと速い.operator.itemgetter()
およびcollections.namedtuple()
もまた、新しい速度最適化を有する.Python C APIとCPythonの改良
最新バージョンのPythonでは、CPythonで使用されているC API(C言語で作成されたPythonのリファレンス実装)を再構築する作業がメインとなっている.これまで、この作業ではインクリメンタル変更のみが発生していましたが、これらの合計は次のとおりです.
どこでPython 3.8をダウンロードします
Python Software FoundationからPython 3.8 betaをダウンロードできます.
From: https://www.infoworld.com/article/3400640/the-best-new-features-in-python-38.html