一尘不染

Python-如何获取方法参数名称?

python

鉴于Python函数:

def a_method(arg1, arg2):
    pass

如何提取参数的数量和名称。即,鉴于我有提及func,因此我希望func.[something]返回("arg1", "arg2")

为此的使用场景是,我有一个装饰器,并且希望以与实际函数作为键一样的顺序使用方法参数。即,"a,b"我打电话时装饰器的外观如何a_method("a", "b")


阅读 640

收藏
2020-02-19

共1个答案

一尘不染

看一下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()在内置函数上使用,则会得到一个。

从Python 3.3开始,你可以inspect.signature()用来查看可调用对象的调用签名:

>>> inspect.signature(foo)
<Signature (a, b, c=4, *arglist, **keywords)>
2020-02-19