Python列表函数的参数名

48

有办法获取函数的参数名称吗?

def foo(bar, buz):
    pass

magical_way(foo) == ["bar", "buz"]

1
重复:https://dev59.com/8XRB5IYBdhLWcg3wl4AP,https://dev59.com/-XVC5IYBdhLWcg3wqzHV - Sasha Chedygov
3
也许再加一个会更好,因为我花了半个小时的时间试图在谷歌上搜索这个问题,但没有避免重复出现。 - Bemmu
3
这是谷歌现在的首个搜索结果,多亏了提问者OP的精准提问。通过更好地构建问题,让答案更容易被找到,这对于寻找答案的用户的用户体验绝对是相关的。 - episodeyang
顺便说一句,我后来了解到在这里说“argument”是错误的,因为接收变量是参数,而不是参数。 - Bemmu
2个回答

75

使用Python标准库中的inspect模块(执行内省的最干净、最可靠的方法)。

具体来说,inspect.getargspec(f)返回f参数的名称和默认值,如果你只想要名称而不关心特殊形式*a**k

import inspect

def magical_way(f):
    return inspect.getargspec(f)[0]

完全满足您所表达的要求。

9
你也可以使用 return inspect.getargspec(f).args。该代码行用于获取函数 f 的参数列表。 - John La Rooy
12
也许你可以编辑这个内容,因为getargspec现在已经被弃用,推荐使用inspect.signature()代替。 - Luke Murray
2
inspect.getargspec在Python 3.6中已被弃用。相反,应该使用inspect.signature。有人知道如何使用它吗?谢谢。 - juan Isaza
16
inspect.signature(f).parameters 翻译为:检查函数 f 的签名参数。 - lovesh
1
@juanIsaza 你也可以使用 inspect.getfullargspec(f).args 或 inspect.getfullargspec(f)[0](Python 3.7)。 - Mauricio Arboleda-Zapata
显示剩余3条评论

19
>>> import inspect
>>> def foo(bar, buz):
...     pass
... 
>>> inspect.getargspec(foo)
ArgSpec(args=['bar', 'buz'], varargs=None, keywords=None, defaults=None)
>>> def magical_way(func):
...     return inspect.getargspec(func).args
... 
>>> magical_way(foo)
['bar', 'buz']

1
请注意,.args 仅适用于 Python 2.6 及以上版本。对于旧版本,您必须使用 [0] - Wolph
2
提供 magical_way() 函数加一。 - Chinmay Kanchi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接