当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python inspect.signature用法及代码示例


用法:

inspect.signature(callable, *, follow_wrapped=True, globals=None, locals=None, eval_str=False)

返回给定 callableSignature 对象:

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
...     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>

接受广泛的 Python 可调用对象,从普通函数和类到 functools.partial() 对象。

对于使用字符串化注释 (from __future__ import annotations) 在模块中定义的对象,signature() 将尝试使用 inspect.get_annotations() 自动 un-stringize 注释。 globallocalseval_str 参数在解析注解时传递到 inspect.get_annotations() ;有关如何使用这些参数的说明,请参阅inspect.get_annotations() 的文档。

如果无法提供签名,则引发 ValueError,如果不支持该类型的对象,则引发 TypeError。此外,如果注释是字符串化的,并且 eval_str 不为假,则对 un-stringize 的 eval() 调用可能会引发任何类型的异常。

函数签名中的斜杠 (/) 表示它之前的参数是positional-only。有关详细信息,请参阅有关 positional-only 参数的常见问题解答条目。

3.5 版中的新函数:follow_wrapped范围。经过False得到一个签名callable具体来说 (callable.__wrapped__不会用于解开装饰的可调用对象。)

3.10 版中的新函数:globals,locals, 和eval_str参数。

注意

在 Python 的某些实现中,某些可调用对象可能不是可自省的。例如,在 CPython 中,C 中定义的一些内置函数不提供有关其参数的元数据。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 inspect.signature。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。