PythonのFunction Annotations

Function Annotationsとは

Python 3.0からFunction Annotationsという機能が利用できるようになりました。日本語では関数アノテーションと呼ばれています。これは自らの定義する関数に対する任意のメタデータです。 例えばこのようなint型の引数を二つ期待し、int型を返すことを期待する関数があったとします。

def example(n, m):
    return n + m

これはこのように関数アノテーションを加えることができます。

def example(n: int, m: int) -> int:
    return n + m

さらに

example.__annotations__

とすることで、

{'return': <class 'int'>, 'm': <class 'int'>, 'n': <class 'int'>}

このように定義を得られます。

型を強制できるわけではない

しかしながら、関数アノテーションには指定した型のデータしか通さないという制限を加えるものではありません。 そのため、このように引数にも返り値にもint型を指定していたとしても、str型の値を受け取り、str型の値を返すことができてしまいます。

def example(n: int, m: int) -> int:
    return n + m

print(example('a', 'b'))

この結果は

'ab'

となります。

関数アノテーションに渡す値は自由

def example(n: '文字列', m: {'dict': 'dict'}) -> ('tuple', ):
    return n + m

このように引数や返り値に説明を加えることもできます。この場合の__annotations__は

{'n': '文字列', 'm': {'dict': 'dict'}, 'return': ('tuple',)}

となります。

コメント

2015 - 2017 (c) 成瀬基樹