函数签名对象,表示调用函数的方式,即定义了函数的输入和输出。函数
在Python中,可使用标准库inspect的一些方法或类,来操做或建立函数签名。ui
spa
# 注意是小写的signature from inspect import signature def foo(value): return value # 获取函数签名 foo_sig = signature(foo) # 经过函数签名的parameters属性,能够获取函数参数 foo_params = foo_sig.parameters
code
# 注意是首字母大写的Signature from inspect import Signature, Parameter # 建立一个函数参数列表,列表内的元素由类Parameter的实例组成 # Parameter实例化时,依次接受参数名、参数类型、默认值和参数注解 # 默认值和参数类型默认为空,这里的空值不是None,而是Parameter.empty,表明没有值 parms = [Parameter('x', Parameter.POSITIONAL_OR_KEYWORD), Parameter('y', Parameter.POSITIONAL_OR_KEYWORD), Parameter('z', Parameter.KEYWORD_ONLY, default=9)] # 使用Signature类,接受函数参数列表,实例化出函数签名实例 sig = Signature(parms)
对象
延续上面的例子,经过函数签名的bind方法,接受函数参数,若是匹配,返回参数BoundArguments实例,若是不匹配,则抛出TypeError,并给出详细的异常信息。blog
经过BoundArguments实例的属性,能够获取函数签名、参数的值等内容。class
bound_args_01 = sig.bind(1, 2, z=3) # <BoundArguments (x=1, y=2, z=3)> bound_args_02 = sig.bind(1, 2) # <BoundArguments (x=1, y=2)> bound_args_03 = sig.bind(1) # TypeError # missing a required argument: 'y'