[解決済み] 変数アノテーションとは何ですか?
質問
Python 3.6がリリースされるようです。 PEP 494 -- Python 3.6 リリーススケジュール が12月末に言及してるので、一通り Python 3.6 の新機能について を読んでみると 変数アノテーション :
PEP 484 は、関数パラメータの型アノテーション(別名、型ヒント)の標準を導入しました。この PEP はクラス変数とインスタンス変数を含む変数の型を注釈するための構文を Python に追加します。
primes: List[int] = [] captain: str # Note: no initial value! class Starship: stats: Dict[str, int] = {}
関数アノテーションと同様に、Pythonインタープリタは変数アノテーションに特別な意味を持たせず、特殊な属性である
__annotations__
に格納するだけです。静的型付け言語における変数宣言とは対照的に、アノテーション構文の目標は、抽象構文木と__annotations__
属性を通じて、サードパーティのツールやライブラリに構造化された型メタデータを簡単に指定できるようにすることです。
私が読んだところでは、これらは Python 3.5 から来る型ヒントの一部であり、次のように説明されています。 Python 3.5 の Type hints とは何ですか? .
私は
captain: str
と
class Starship
の例がありますが、最後の例はよくわかりません。どのように
primes: List[int] = []
はどのように説明するのでしょうか?それは、整数だけを許可する空のリストを定義しているのでしょうか?
どのように解決するのですか?
の間にあるものはすべて
:
と
=
はタイプヒントなので
primes
は確かに
List[int]
であり、初期状態では空リストが設定されています(そして
stats
は初期状態では空の辞書であり、次のように定義されます。
Dict[str, int]
).
List[int]
と
Dict[str, int]
は次の構文の一部ではありませんが、これらは Python 3.5 typing hints PEP で既に定義されていました。3.6 の
PEP 526 -
変数アノテーションのための構文
提案
のみ
は、変数に同じヒントを付けるための構文を定義します。以前は、コメント付きの変数にしか型ヒントを付けられませんでした(例えば
primes = [] # List[int]
).
どちらも
List
と
Dict
は
一般的な
型であり、特定の(具体的な)内容を持つリストまたは辞書のマッピングを持っていることを示します。
については
List
では、「引数」は一つしかありません。
[...]
構文の要素)、リストの各要素の型です。例えば
Dict
の場合、最初の引数はキーの型、2番目の引数は値の型です。つまり
すべて
の値は
primes
のリストは整数であり
すべて
のキー・バリュー・ペアは
stats
辞書にあるすべてのキーと値のペアは
(str, int)
のペアで、文字列と整数を対応させます。
を参照してください。
typing.List
と
typing.Dict
の定義では
セクションの
ジェネリックス
と同様に
PEP 483 -
タイプヒントの理論
.
関数の型ヒントと同様に、その使用は任意であり、また、そのような型ヒントは
アノテーション
とみなされます (これを付けるオブジェクトがある場合、モジュールではグローバル、クラスでは属性ですが、関数ではローカルではありません)。
__annotations__
属性で調べることができます。これらのアノテーションには任意の情報を付けることができ、タイプヒント情報に厳密に制限されることはありません。
を読みたいと思うかもしれません。 提案書全文 それは、そのようなアノテーションがいつ評価されるか、どのようにそれらをイントロスペクトするか、そして、例えば、何かをクラス属性対インスタンス属性として宣言する方法を指定するものです。
関連
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] Pythonの文字列書式をリストで使う