Python 3.8で最高の新機能

5450 ワード

Python 3.8は流行言語の最新バージョンで、スクリプトの作成と自動化から機械学習とWeb開発までのすべての内容に適しています.現在、正式なbetaバージョンで使用可能であり、Python 3.8は多くの巧みな構文変更、メモリ共有、より効果的なシーケンス化と逆シーケンス化、改善された辞書などをもたらしています.
当然、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を埋め込みで使用する場合や、アプリケーションとして配布される独立した実行時などです.
    パフォーマンスの向上
  • 多くの組み込み方法および関数の速度は、それらに伝達されるパラメータの多くが不要に変換されるため、20%〜50%向上した.
  • 新しいオペレーティングコードキャッシュは、解釈器内のいくつかの命令の速度を速めることができる.しかしながら、現在唯一実現されている加速はLOAD_GLOBALのオペレーティングコードに対して行われ、現在は40%加速されている.より高いバージョンのPythonについても同様の最適化を計画している.
  • ファイルコピー操作(例えば、shutil.copyfile()およびshutil.copytree()は、プラットフォーム固有の呼び出しおよびその他の最適化を使用して、操作速度を速める.
  • .
  • 現在、新しく作成されたリストは平均12%小さくなっています.これは、リスト構築関数オブジェクトの長さを利用した最適化方法のおかげです(事前に知っていれば).
  • Python 3.8では、新しいクラス(例えば、class A(object))のクラス変数の書き込みがずっと速い.
  • operator.itemgetter()およびcollections.namedtuple()もまた、新しい速度最適化を有する.

  • 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