Аннотации к функциям - это просто «примечания», которые вы можете прикрепить к параметрам функции и типу возвращаемого значения. Они не действуют во время выполнения, хотя вы можете получить доступ к им.
>>> def foo(x: int) -> str: pass
...
>>> foo.__annotations__
{'x': <class 'int'>, 'return': <class 'str'>}
Если вы выбрали to, вы можете использовать их для реализации своей собственной проверки типов. code:
def foo(x: int) -> str:
if not isinstance(x, foo.__annotations__('x')):
raise ValueError("x is not the right type")
rv = str(x)
if not isinstance(rv, foo.__annotations__('return')):
raise ValueError("wrong return type")
return rv
Это, конечно, легко победить, и вероятность появления ошибок столь же велика, как и для их обнаружения.
Подсказки типа предоставляют документацию («Вы должны передайте int
в качестве аргумента, и вы должны вернуть str
значение. ") И средство проверки типов stati c для выявления очевидных ошибок. Учитывая чистое определение
def foo(x: int) -> str:
return str(x)
, такой инструмент, как mypy
, может пометить следующий код как ошибку без необходимости выполнить код:
foo("nine") # "nine" does not have type int
3 + foo(5) # foo returns a str, but you can't add int and str values