鉴于Python函数:
Python
def a_method(arg1, arg2): pass
如何提取参数的数量和名称。即,鉴于我有提及func,因此我希望func.[something]返回("arg1", "arg2")。
func.[something]
("arg1", "arg2")
为此的使用场景是,我有一个装饰器,并且希望以与实际函数作为键一样的顺序使用方法参数。即,"a,b"我打电话时装饰器的外观如何a_method("a", "b")?
"a,b"
a_method("a", "b")
看一下inspect模块-这将为你检查各种代码对象属性。
inspect
>>> inspect.getfullargspec(a_method) (['arg1', 'arg2'], None, None, None)
其他结果是 args和* kwargs变量的名称,以及提供的默认值。即。
>>> def foo(a, b, c=4, *arglist, **keywords): pass >>> inspect.getfullargspec(foo) (['a', 'b', 'c'], 'arglist', 'keywords', (4,))
请注意,在某些Python实现中,某些可调用对象可能不是自省的。例如,在CPython中,C中定义的某些内置函数不提供有关其参数的元数据。结果,ValueError如果你inspect.getfullargspec()在内置函数上使用,则会得到一个。
ValueError
inspect.getfullargspec()
从Python 3.3开始,你可以inspect.signature()用来查看可调用对象的调用签名:
inspect.signature()
>>> inspect.signature(foo) <Signature (a, b, c=4, *arglist, **keywords)>