从函数签名中获取位置参数的名称

时间:2017-02-20 19:22:40

标签: python python-3.x signature

使用Python 3.x,我试图从某个函数中获取所有位置参数的名称,即:

springBoot

现在我正在这样做:

def foo(a, b, c=1):
    return

当函数出现时* args即:

from inspect import signature, _empty
args =[x for x, p in signature(foo).parameters.items() if p.default == _empty]

我添加了这一行:

def foo(a, b, c=1, *args):
    return

我想知道是否有更好的方法来实现这一目标。

作为suggested by Jim Fasarakis-Hilliard处理* args案例的一种更好方法是使用Parameter.kind:

args.remove("args")

1 个答案:

答案 0 :(得分:5)

是的,您可以通过另外检查参数的.kind属性是否不等于Parameter.VAR_POSITIONAL来实现更强大的解决方案。

对于*args,这是从函数构建签名对象时设置的值:

>>> def foo(a, b, c=1, *args): pass
>>> print(signature(foo).parameters['args'].kind)
VAR_POSITIONAL

所以只需从Parameter导入inspect并添加或kind != Parameter.VAR_POSITIONAL

的条件
>>> from inspect import Parameter
>>> Parameter.VAR_POSITIONAL == p['args'].kind
True