最近、面白いことに気づいた。Python 3.3 文法仕様:
funcdef: 'def' NAME parameters ['->' test] ':' suite
オプションの「矢印」ブロックは Python 2 には存在せず、Python 3 での意味に関する情報は見つかりませんでした。これは正しい Python であり、インタープリターによって受け入れられることがわかりました。
def f(x) -> 123:
return x
これは何らかの前提条件構文かもしれないと思いましたが、
x
まだ定義されていないので、ここではテストできません。- 矢印の後に何を入れても (例
2 < 1
)、関数の動作には影響しません。
この構文スタイルに詳しい人は説明してもらえますか?
ベストアンサー1
それは関数注釈。
詳しく言うと、Python 2.x には docstrings があり、これを使用するとさまざまな種類のオブジェクトにメタデータ文字列を添付できます。これは非常に便利なので、Python 3 ではこの機能が拡張され、関数にパラメータと戻り値を説明するメタデータを添付できるようになりました。
事前に想定された使用例はありませんが、PEP ではいくつか提案されています。非常に便利な例の 1 つは、パラメータに期待される型を注釈付けできるようにすることです。そうすれば、注釈を検証したり、引数を正しい型に強制変換したりするデコレータを簡単に作成できます。もう 1 つは、パラメータ固有のドキュメントを docstring にエンコードするのではなく、許可することです。