強力な新しい割り当て構文から下部の大きな変更まで、Python3.8はより最新のPythonに移行します。
Python 3.8はPython言語の最新バージョンであり、スクリプト作成、自動化、およびマシン学習やWeb開発などのさまざまなタスクに適しています。現在、Python 3.8は公式のベータ段階に入っています。このバージョンでは、多くの構文変更、メモリ共有、より効率的なシリアル化と逆シリアル化、改善された辞書、およびより多くの新機能が提供されます。
Python 3.8では、多くのパフォーマンスの改善も導入されました。一般的に、私たちはより速く、より正確で、より一貫性があり、より現代的なPythonを手に入れようとしています。 Python3.8の新機能と最も重要な変更点は次のとおりです。
1、 割り当て式
Python 3.8での最も明らかな変更は、割り当て式である:=演算子です。割り当て式は、変数が存在しない場合でも、変数に値を割り当てることができます。式で使用でき、個別のステートメントとして表示する必要はありません。
while(line := file.readline())!="end":print(chunk)
上記の例では、可変行が存在しない場合は作成され、file.readline()の戻り値が割り当てられます。次に、行が「終了」しているかどうかを確認します。そうでない場合は、次の行を読み、その行に保存して、テストを続行します。
割り当て式は、リスト内包表記と同じように、Pythonのシンプルさの伝統に従います。目的は、特定のPythonプログラミングパターンでの退屈な定型コードを回避することです。たとえば、上記のコードは、一般的な記述でさらに2行のコードを記述する必要があります。
2、 位置のみで指定されたパラメータ
位置のみで指定されたパラメーターは、関数定義の新しい構文です。これにより、プログラマーはパラメーターを位置のみで指定するように強制できます。これにより、Python関数定義で、どのパラメーターが位置パラメーターであり、どのパラメーターがキーワードパラメーターであるかというあいまいさを解決できます。
位置によってのみ指定されたパラメーターは、次の状況で使用できます。関数は任意のキーワードパラメーターを受け入れますが、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)は正しくありません。
3、 f文字列のデバッグをサポート
f文字列形式を使用すると、同じ式で出力テキストと値または変数を簡単に計算でき、より効率的です。
x =3print(f'{x+1}')
出力4。
いいえ= f文字列式の最後に追加すると、f式自体の値が出力され、その後に計算値が続きます。
x =3print(f'{x+1=}')
出力はx + 1 = 4です。
4、 マルチプロセス共有メモリ
Python 3.8では、マルチプロセッシングモジュールがSharedMemoryクラスを提供します。これにより、異なるPythonプロセス間で共有メモリ領域を作成できます。
古いバージョンのPythonでは、プロセス間でデータを共有するには、ファイルを書き込むか、ネットワークソケットを介して送信するか、Pythonのpickleモジュールを使用してシリアル化する必要があります。共有メモリは、プロセス間でデータを転送するためのより高速な方法を提供し、Pythonのマルチプロセッサおよびマルチコアプログラミングをより効率的にします。
共有メモリセグメントは、純粋なバイト領域として、または数値タイプ、文字列、バイトオブジェクト、Noneオブジェクトなどの少数のPythonオブジェクトを格納できる変更不可能なリストのようなオブジェクトとして割り当てることができます。
5、 入力モジュールの改善
Pythonは動的に型指定された言語ですが、サードパーティのツールがPythonコードを検証できるように、型付けモジュールを介して型のヒントを追加できます。 Python 3.8は入力にいくつかの新しい要素を追加するため、より堅牢なチェックをサポートできます。
6、 ピクルスプロトコルの新しいバージョン
Pythonのpickleモジュールは、Pythonデータ構造またはインスタンスをシリアル化および逆シリアル化する方法を提供し、後で読むために辞書をそのまま保存できます。異なるバージョンのPythonは異なるピクルスプロトコルをサポートし、最新バージョンはより広く、より強力で、より効率的なシリアル化をサポートします。
Python 3.8によって導入されたpickleプロトコルの5番目のバージョンは、新しい方法でオブジェクトをpickleすることができます。これは、bytes、memoryviews、NumpyarrayなどのPythonのバッファープロトコルをサポートできます。新しいピクルスは、これらのオブジェクトをピクルス化するときに多くのメモリコピー操作を回避します。
NumPyやApacheArrowなどの外部ライブラリは、Pythonバインディングで新しいpickleプロトコルをサポートしています。新しいピクルスは、Python 3.6および3.7のプラグインとしても使用でき、PyPIからインストールできます。
7、 リバーシブル辞書
この辞書は、PyPyプロジェクトによって提供された新しい実装を使用して、Python3.6で書き直されました。現在の辞書は、より高速でコンパクトであることに加えて、要素の順序を継承します。要素は、リストのように、追加された順序で配置されます。 Python 3.8では、辞書でreversed()も使用できます。
8、 パフォーマンスの向上
9、 Python CAPIおよびCPythonの実装
最新バージョンのPythonは、CPython(Cで記述されたPythonのリファレンス実装)で使用されるCAPIのリファクタリングに多大な労力を費やしています。これまでのところ、これらの作品はまだ追加されており、既存の結果は次のとおりです。
Recommended Posts