是否可以使用Python 3语法声明输入参数,返回值类型是否可以确定这些类型?与确定函数的参数数量类似吗?
def foo(name: str) -> int:
....
我想分别获得str
和int
。
答案 0 :(得分:7)
typing
模块具有以下便利功能:
>>> import typing
>>> typing.get_type_hints(foo)
{'name': <class 'str'>, 'return': <class 'int'>}
这与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的方法看起来更方便。