繁体   English   中英

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

[英]Get names of positional arguments from function's signature

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

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

现在我这样做:

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

当函数alows * args即:

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

我正在添加这一行:

args.remove("args")

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


正如Jim Fasarakis-Hilliard建议的那样,处理* args案例的一个更好方法是使用Parameter.kind:

from inspect import signature, Parameter
args =[]
for x, p in signature(foo).parameters.items():
    if p.default == Parameter.empty and p.kind != Parameter.VAR_POSITIONAL:
        args.append(x)

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

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

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

所以只需从inspect和add中导入Parameter或者kind != Parameter.VAR_POSITIONAL条件kind != Parameter.VAR_POSITIONAL

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM