Python3.10のいくつかの新機能

Python 3.10.0a2バージョンが2020-11-04にリリースされたので、Python3.10のいくつかの新機能を垣間見ることができます。これらの新機能は、将来のPythonエコシステムを変更し、私たちが知っていて気に入っている使いやすさを維持しながら、より明確で読みやすくする可能性があります。

新しいリリースプランのおかげで:PEP 602-Pythonの年間リリースサイクルにより、開発期間が短くなり、2021年10月に本日共有された新機能を使用する予定です。

PEP 602

1、 タイプ注釈のさらなる拡張

3.9 Pythonのタイプヒントとコメントは大幅に改訂され、クリーンアップされました。タイプヒントは継続的な傾向のようです。3.10でさらに拡張されました。目的は明らかです。読みやすくするためであり、読む必要はありません。コードは、変数のタイプと関数の戻り値を知ることができます。

タイプアノテーションの実行を遅らせる

タイプアノテーションの操作は、通常、関数定義時に実行されると見なされます。つまり、タイプアノテーションはトップダウン方式で行ごとにチェックされます。

論理的に思えますが、これには2つの問題があります。

1、 未定義の型を参照する型ヒント(前方参照)は機能しないため、文字列形式で表現する必要があります。言い換えると、intがカスタムタイプの場合、intを記述する代わりに「int」を記述する必要があります。

2、 この時点でタイプヒントが実行されるため、これによりモジュールのインポート速度が低下します。

したがって、遅延型注釈の代わりに、型注釈は文字列の形式で __annotations__に格納されます。必要に応じて、これらの型注釈は、実行時にtyping.get_type_hints()またはinspectによって解析できます。すぐに分析するsignature()。これの利点は、モジュールのインポートを最初に実行できるため、前方参照が可能になり、初期化時間が短縮されることです。

新しいタイプのコメントユニオン演算子

3.10 論理OR演算子として「|」を使用します。データタイプに注釈を付けるときは、|をまたはとして使用できます。たとえば、intまたはfloatであることが期待される変数があり、次のようにint | floatと書くことができます。

def f(x: int | float)-> float:return x *3.142f(1)  # pass
f(1.5)  # pass
f('str')  # linter will show annotation error

Union [int、float]などの入力モジュールによって提供されるキーワードUnionを使用することもできます。

TypeAliasメモ

前方参照の問題に戻ると、前方参照を回避するための一般的な解決策は、それらを文字列として書き込むことです。

ただし、タイプを文字列として書き込むと、これらのタイプを変数に割り当てるときに問題が発生します。これは、Pythonが文字列リテラルタイプの注釈を単なる文字列と見なすためです。

タイプアノテーションが通常使用される場所でタイプアノテーション変数を使用すると、エラーが返されます。例えば:

MyType ="ClassName"  # ClassName is our type annotation
def foo()-> MyType:...

ここでは、MyTypeを型のエイリアスとして使用しようとしていますが、MyTypeは型エイリアスではなく文字列値として読み取られます。 ClassNameがコードの後半で定義されている限り、これは有効です。現在の状況では、これによりコメントエラーが発生します。

この問題を解決するために、MyTypeをタイプエイリアスとして明示的に識別するメソッドが追加されました。

from typing_extensions import TypeAlias
MyType: TypeAlias ="ClassName"
def foo()-> MyType:...
OR
MyType: TypeAlias = ClassName # if we have defined ClassName already
def foo()-> MyType:...

型が重要である理由についてお話ししましょう。これは確かに大きな変化ではありませんが、Python開発者が型を強化するための努力を倍加するのを見るのは本当にクールです。 Pythonの利点は、使いやすさと急な学習曲線がないことです。その理由の1つは、コードで型を明示的に定義する必要がないことです。

拡張された型注釈は直感に反しているように見えるかもしれませんが、型を定義するオプションを開発者に提供すると、コードベースの読みやすさと保守性を大幅に向上させることができます。たとえば、Pythonトランスフォーマーライブラリのソースコードから次の説明を見ることができます。

Even without context, we can read this code and immediately grasp what data we should expect to be fed into these functions, classes, and methods — and exactly which datatypes we should be expecting to return.
In complex code bases (and even simple ones), type annotation can massively improve readability. Simultaneously, not everyone will want (or need) to use them — so an optional, exception-free functionality strikes a perfect balance.

つまり、コンテキストがなくても、このコードを読み取って、これらの関数、クラス、およびメソッドに入力されると予想されるデータと、返されると予想されるデータタイプを即座に把握できます。

ただし、複雑なコードベース(単純なコードベースでも)では、型注釈によって読みやすさが大幅に向上します。同時に、誰もがそれらを使用したい(または必要としている)わけではないので、これはオプションです。この異常でない機能は、完璧なバランスを実現できます。

これらの改善は、型注釈機能に対するPythonの取り組みを示しています。これに基づいて、お気に入りのライブラリと独自のコードは読みやすさを大きく示すことができ、Pythonエコシステムに長期的なプラスの影響を与えます。

2、 新しい関数と関数パラメーターの変更

タイプヒント関数の拡張に加えて、コアPython関数が次のように更新されました。

関数zip()は厳密なパラメーターを追加します

関数zip()は、strictパラメーターを追加します。strict= Trueが設定されていて、送信されるパラメーターの長さが等しくない場合、次の図に示すように、例外がスローされます。

新しいstrictパラメーターは、一致しないデータを盲目的に切り捨てることはありませんが、その動作を制御できるため、多くの開発者をトラブルから救うことができます。

新しい整数ビットカウンターint.bit_count()

この新しい方法により、整数のバイナリ表現で1の数を数えることができます。これは、特定のシナリオで非常に実用的で効率的です。

上図の結果は、2桁が1の整数の数です。

0=000000001=000000012=000000103=0000001110=0000101011=0000101112=00001100100=01100100101=01100101102=01100110

ディクショナリビューに属性を追加します

ディクショナリタイプの3つのメソッド:dict.items()、dict.keys()、およびdict.values()は、それぞれディクショナリの3つのビューを返します。各ビューは、マッピングと呼ばれる属性を追加します。具体的な使用法は次のとおりです。

新しい属性マッピングタイプは、元の辞書を囲む属性であるtypes.MappingProxyTypeに属しています。任意のビューでマッピング属性にアクセスすると、元の辞書が返されます。

3.10の開発タイムラインからわずか数か月ですが、多くの興味深い変更がありました。Pythonの開発はまだ進行中であり、より興味深い機能が言語に追加されるようです。

この記事を気に入っていただければ幸いです。いいね、再投稿、フォロー、サポートありがとうございます。

Recommended Posts

Python3.10のいくつかの新機能
Python3.9の7つの機能
Python3.8の新機能の秘密
Zabbix 5.0LTSの新機能のリスト
python操作redisのいくつかの例
まず、Ubuntu17.10の新機能を見てください
Python構文の基本
Pythonの基本構文
Pythonの基礎知識(1)
pythonのPrettytableモジュール
pythonダウンロード新しいモジュール
09.Python3の共通モジュール
Pythonの基盤を統合する(4)
pythonリスト(LIST)の深い理解
wavファイルのPython分析
Python(6)の基盤を統合する
PythonクローラーのJSの分析
栄光のパイソンキング壁紙
Python(5)の基盤を統合する
gomokuプログラムのPython実装
Pythonマルチスレッドの深い理解
Pythonオブジェクト指向プログラミングの分析
OpenCVインストールのPythonバージョン
Pythonの9つの機能エンジニアリング手法
python描画モジュールのmatplotlib
パラメータを渡すPythonメソッド
Pythonの基盤を統合する(3)
Python共通モジュールのコレクション
pythonでのwheelの使用法
Pythonの対数法の要約
pythonバックトラッキングテンプレートの詳細な説明
Pythonイールドの使用例の分析
Pythonプラグインメカニズムの詳細な実装
pythonシーケンスタイプの詳細な説明
pythonリストの逆トラバーサルの実装
IOU計算ケースのPython実装
魔法の方法とPythonの使用
Python変数スコープの詳細な理解
word2vec操作のPython予備実装
Pythonは中国語の4つの車輪を処理します
情報エントロピーの例のPython計算
pythonselenium操作cookieの実装
Python開発でのnumpyの使用
地主取引のPythonシミュレーション
Pythonの用途は何ですか
Pythonクローラーのスクレイピーシミュレーションログイン
Python条件付き制御ステートメントの分析
[Linux] Ubuntuのいくつかの高効率ツール
Pythonでの辞書の詳細な使用法
pythonでのosパッケージの使用
Python関数のいくつかの一般的なモード
200のPython標準ライブラリの要約!
pythonクローラーのMongodbとpythonの相互作用
python3登録グローバルホットキーの実装
python学生管理システムの実装
pythonにはいくつかのバージョンがあります
python定義クラスの簡単な使用法
プライベート属性を呼び出すpythonのメソッドの概要
Pythonモジュールの知識の完全な分析
pythonアクセスAlipayの操作例
Python文字列プーリングの前提