web-dev-qa-db-ja.com

Python型ヒント(注釈)は実行時の影響を引き起こしますか?

Python関数の注釈と型のヒント( PEP 3107 および PEP 484 )は、実行時の影響を引き起こす可能性がありますか?

コードを高速化できますか?または、メモリの使用量を減らしますか?それ以外の場合は、コードが遅くなりますか?

11
Y.N

型のヒントと注釈は属性を提供します( typing.get_type_hints )サードパーティのツールで渡すことができますが、ネイティブCPythonは実行時にこれらを型チェックしないため、コメントと同じようにコードのパフォーマンスに大きな影響を与えることはありません。 timeitを使用していくつかのテストを実行しましたが、タイプヒントを削除しても、実行時の影響はごくわずかでした(バックグラウンドノイズと区別できません)。したがって、パフォーマンスに関する懸念は、最適化が時期尚早の深刻なケースになることは間違いありません。

から PEP 484

提案されたタイピングモジュールには、ランタイムタイプチェック用のいくつかのビルディングブロック(特にget_type_hints()関数)が含まれますが、特定のランタイムタイプチェック機能を実装するには、たとえばデコレータやメタクラスを使用して、サードパーティパッケージを開発する必要があります。パフォーマンスの最適化に型ヒントを使用することは、読者の練習問題として残されています。

11
Chris_Rands

PEP 484ドキュメントの非目標 によると、型のチェックとパフォーマンスの最適化は、サードパーティのツールに依存するか、プログラマーに任されています。

つまり、明示的に使用しない限り、実行時の影響は発生しません。

4
Rob