Python

Python 関数のアノテーション

関数の引数、戻り値の説明を記述する

def f1(x: 'xの説明', y: 'yの説明') -> '戻り値の説明':
    return x + y

print(f1(1, 2)) # 3

説明に型を設定する

:や->のあとに型を書くこともできる。しかし、以下のように型チェックが型チェックが行われることはないため、以下のようになる。関数自体では、annotationの方と異なる場合も、引数として正しく受け取れる。(ただし、関数内の処理によっては当然エラーになることもある)

def f2(x:int, y: int) -> int:
    return x + y

print(f2(1, 2)) # 3
print(f2("hello", ", world")) # hello, world
print(f2("test", 0)) # TypeError: can only concatenate str (not "int") to str

関数のアノテーションを取り出す

__annotations__属性に辞書型で格納されている。

def f1(x: 'xの説明', y: 'yの説明') -> '戻り値の説明':
    return x + y

def f2(x:int, y: int) -> int:
    return x + y

print(f1.__annotations__) # {'x': 'xの説明', 'y': 'yの説明', 'return': '戻り値の説明'}
print(f2.__annotations__) # {'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}