ホームページ  >  記事  >  バックエンド開発  >  Python 3.8 の新機能について 1 つの記事で学びましょう

Python 3.8 の新機能について 1 つの記事で学びましょう

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼転載
2019-08-19 17:58:523446ブラウズ

Python 3.8 の新機能について 1 つの記事で学びましょう

Python 3.8 は Python 言語の最新バージョンで、スクリプト作成、自動化、機械学習、Web 開発などのさまざまなタスクに適しています。 Python 3.8 が公式ベータ段階に入り、このバージョンでは多くの構文変更、メモリ共有、より効率的なシリアル化と逆シリアル化、辞書の改善、その他の新機能が追加されています。

Python 3.8 では、パフォーマンスも多数向上しています。全体として、より高速で、より正確で、より一貫性があり、より最新の Python が実現しようとしています。以下は、Python 3.8 の新機能と最も重要な変更点です。

1. 代入式

Python 3.8 での最も明らかな変更は、代入式、つまり := 演算子です。代入式では、変数が存在しない場合でも、変数に値を割り当てることができます。別のステートメントとして出現せずに式内で使用できます。

Python 3.8 の新機能について 1 つの記事で学びましょう

上記の例では、変数 line が存在しない場合は変数 line が作成され、file.readline() の戻り値が代入されます。次に、行が「終了」であるかどうかを確認します。そうでない場合は、次の行を読んでその行に保存し、テストを続けます。

代入式は、リスト内包表記と同様に、Python の伝統的な単純さに従っています。その目的は、特定の Python プログラミング モデルにおける退屈な定型コードを避けることです。たとえば、上記のコードを通常の方法で記述するには、さらに 2 行のコードが必要です。

関連する推奨事項: 「Python ビデオ チュートリアル

2. 位置によって指定されたパラメーターのみ

位置的にのみ指定指定された引数は、プログラマがパラメータを位置的にのみ指定することを強制できる関数定義の新しい構文です。これにより、どのパラメータが位置パラメータでどのパラメータがキーワード パラメータであるかについての Python 関数定義のあいまいさが解決されます。

位置によってのみ指定されたパラメータは、次の状況で使用できます。関数は任意のキーワード パラメータを受け入れますが、1 つ以上の不明なパラメータも受け入れることができます。これは Python の組み込み関数の場合によくあることなので、プログラマがこれを実行できるようにすると、Python 言語の一貫性が高まります。

Python ドキュメントに示されている例は次のとおりです。

Python 3.8 の新機能について 1 つの記事で学びましょう

#記号 / は位置パラメータとキーワード パラメータを区切ります。この例では、すべてのパラメータが未知のパラメータです。 Python の以前のバージョンでは、z はキーワード引数とみなされます。ただし、上記の関数定義を使用すると、pow(2, 10) と pow(2, 10, 5) はどちらも正しい呼び出しメソッドですが、pow(2, 10, z=5) は正しくありません。

3. f-string デバッグのサポート

f-string 形式により、同じ式内の出力テキストと値または変数の計算が容易になり、効率が向上します。 。

Python 3.8 の新機能について 1 つの記事で学びましょう

#出力 4.

f 文字列式の最後に = を追加せずに、f 式自体の値を出力し、その後に計算値を出力することができます。

Python 3.8 の新機能について 1 つの記事で学びましょう

出力は x 1 =4 です。

4. マルチプロセス共有メモリ

Python 3.8 では、マルチプロセッシング モジュールは、異なる Python プロセス間で共有メモリ領域を作成できる SharedMemory クラスを提供します。

古いバージョンの Python では、プロセス間で共有されるデータは、ファイルに書き込むか、ネットワーク ソケット経由で送信するか、Python の pickle モジュールを使用してシリアル化することしかできませんでした。共有メモリはプロセス間でデータをより高速に転送する方法を提供し、Python でのマルチプロセッサおよびマルチコア プログラミングをより効率的にします。

共有メモリ セグメントは、単純なバイト領域として、または数値型、文字列、バイト オブジェクト、None オブジェクトなどを格納できる変更不可能なリスト状のオブジェクトとして割り当てることができます。Python オブジェクトの小さなコレクションです。

5. 型付けモジュールの改善

Python は動的に型付けされる言語ですが、型付けモジュールを通じて型ヒントを追加して、サードパーティのツールで検証できるようにすることができます。 Python コード。 Python 3.8 では、より堅牢なチェックをサポートできるように、型指定にいくつかの新しい要素が追加されています。

final 修飾子と Final 型の注釈は、変更または注釈が付けられたオブジェクトをいつでもオーバーライドしてはならず、継承してはいけないことを示します。再割り当てされる。

リテラル型は、式を特定の値または値のリストに制限します (値が同じ型である必要はありません)。

TypedDict を使用すると、特定のキーの値が 1 つ以上の型に制限された辞書を作成できます。これらの制限はコンパイル時に値の正当性を判断するためにのみ使用され、実行時に制限することはできないことに注意してください。

6. pickle プロトコルの新しいバージョン

Python の pickle モジュールは、Python データ構造またはインスタンスをシリアル化および逆シリアル化するメソッドを提供し、辞書は後で読むためにそのまま保存できます。 Python のバージョンが異なれば、サポートされる pickle プロトコルも異なります。最新バージョンでは、より広範で、より強力で、より効率的なシリアル化がサポートされます。

Python 3.8 で導入された pickle プロトコルの 5 番目のバージョンでは、バイト、メモリビュー、Numpy 配列などの Python のバッファ プロトコルをサポートできる新しいメソッドを使用してオブジェクトを pickle できます。新しい pickle では、これらのオブジェクトを pickle 化するときに多くのメモリ コピー操作が回避されます。

NumPy、Apache Arrow、およびその他の外部ライブラリは、それぞれの Python バインディングで新しい pickle プロトコルをサポートします。新しい pickle は、Python 3.6 および 3.7 のプラグインとしても利用でき、PyPI からインストールできます。

7. 可逆辞書

辞書は、PyPy プロジェクトによって提供された新しい実装を使用して、Python 3.6 で書き直されました。より高速かつコンパクトになったことに加えて、辞書は要素の順序を継承するようになりました。要素はリストと同様に、追加された順序で配置されます。 Python 3.8 では、辞書で reversed() も使用できます。

8. パフォーマンスの向上

以前は多くの関数で不必要なパラメーター変換が必要であったため、多くの組み込みメソッドと関数の速度が 20% ~ 50% 向上しました。 。

新しいオペコード キャッシュにより、インタープリターの特定の命令の速度が向上します。ただし、現在達成されている唯一の速度向上は LOAD_GLOBAL オペコードであり、40% 高速化されています。将来のバージョンでも同様の最適化が行われる予定です。

shutil.copyfile() や shutil.copytree() などのファイル コピー操作では、プラットフォーム固有の呼び出しやその他の最適化が使用され、操作速度が向上します。

リストの長さが事前にわかっている場合にリスト コンストラクターによって実行される最適化のおかげで、新しく作成されるリストは以前より平均 12% 小さくなりました。

新しいタイプのクラス (クラス A(オブジェクト) など) のクラス変数への書き込み操作が、Python 3.8 で高速になりました。 Operator.itemgetter() と collections.namedtuple() も速度が最適化されました。

9.Python C API と CPython 実装

最近のバージョンの Python は、CPython で使用される C API (CPython で記述された Python のリファレンス実装) に関してリファクタリングされています。 C. それには多くの努力が払われました。これまでのところ、この作業はまだ追加されており、既存の結果は次のとおりです。

Python 初期化構成 (Python 初期化構成) には、Python 初期化ルーチンをより厳密に制御し、より詳細なフィードバックを可能にする新しい C API が含まれています。これにより、Python ランタイムを他のアプリケーションに埋め込んだり、プログラムによって起動パラメータを Python プログラムに渡したりすることが容易になります。また、新しい API により、すべての Python 構成コントロールが単一の一貫した場所を持つことが保証されるため、将来の変更 (Python の新しい UTF-8 モードなど) が容易になります。

CPython のもう 1 つの新しい C API である「vectorcall」呼び出しプロトコルを使用すると、一時オブジェクトを作成せずに Python の内部メソッドをより高速に呼び出すことができます。 API はまだ不安定ですが、大幅に改善されました。 API は Python 3.9 で成熟する予定です。

Python ランタイム監査フックは、Python ランタイム用の 2 つの API を提供します。これらの API を使用してイベントをフックし、テスト フレームワーク、ログ、監査システムなどの外部ツールがイベントを監視できるようにします。

10. Python 3.8 をダウンロードする方法

Python Software Foundation から Python 3.8 ベータ版をダウンロードします: https://www.python.org/downloads/release /python-380b1/

以上がPython 3.8 の新機能について 1 つの記事で学びましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjianshu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。