1. ホーム
  2. python

[解決済み] Pythonの関数定義における->の意味とは?

2022-03-18 21:18:08

質問

を見ていて、最近面白いことに気づきました。 Python 3.3文法仕様 :

funcdef: 'def' NAME parameters ['->' test] ':' suite

オプションの 'arrow' ブロックは Python 2 では存在せず、Python 3 ではその意味に関する情報を見つけられませんでした。これは正しいPythonであり、インタープリタに受け入れられることがわかりました。

def f(x) -> 123:
    return x

これは何か前提条件となる構文なのかもしれないと思ったが。

  • をテストすることができません。 x はまだ未定義であるため、ここで説明します。
  • 矢印の後に何を入れても(例. 2 < 1 のように、関数の動作に影響を与えません。

この構文スタイルに詳しい方、説明していただけませんか?

どのように解決するのですか?

それは 関数アノテーション .

もっと詳しく言うと、Python 2.xにはdocstringsというものがあり、様々な種類のオブジェクトにメタデータ文字列を付けることができるようになっています。これは驚くほど便利なので、Python 3ではこの機能を拡張して、関数にパラメータと戻り値を記述したメタデータを添付できるようにしました。

特に先入観のない使用例ですが、PEPではいくつかの使用例を提案しています。アノテーションを確認したり、引数を正しい型に強制するデコレーターを簡単に書くことができます。もうひとつは、docstringにエンコードする代わりに、パラメータ固有のドキュメントを許可することです。