检查参数和返回类型

时间:2018-03-29 16:29:26

标签: python python-3.x

是否可以使用Python 3语法声明输入参数,返回值类型是否可以确定这些类型?与确定函数的参数数量类似吗?

def foo(name: str) -> int:
    ....

我想分别获得strint

3 个答案:

答案 0 :(得分:7)

typing模块具有以下便利功能:

>>> import typing
>>> typing.get_type_hints(foo)
{'name': <class 'str'>, 'return': <class 'int'>}

the documentation

这与foo.__annotations__不同,因为get_type_hints可以解析存储在字符串中的转发引用和其他注释,例如

>>> def foo(name: 'foo') -> 'int':
...     ...
... 
>>> foo.__annotations__
{'name': 'foo', 'return': 'int'}
>>> typing.get_type_hints(foo)
{'name': <function foo at 0x7f4c9cacb268>, 'return': <class 'int'>}

它在Python 4.0中特别有用,因为那时all annotations will be stored in string form

答案 1 :(得分:0)

def foo(name: str) -> int:
    pass

foo.__annotations__
# {'name': <class 'str'>, 'return': <class 'int'>}

foo.__annotations__['return'].__name__
# 'int'

答案 2 :(得分:0)

可以使用

inspect

>>> def foo(name: str) -> int:
...     return 0
>>> 
>>> import inspect
>>> 
>>> sig = inspect.signature(foo)
>>> [p.annotation for p in sig.parameters.values()]
[<class 'str'>]
>>> sig.return_annotation
<class 'int'>

@ vaultah的方法看起来更方便。