题 Python列表函数参数名称[重复]


这个问题在这里已有答案:

有没有办法获取函数需要的参数名称?

def foo(bar, buz):
    pass

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

28
2017-08-19 00:42


起源


重复: stackoverflow.com/questions/582056/..., stackoverflow.com/questions/218616/... - Sasha Chedygov
也许还有一个是有道理的,因为我花了半个小时试图谷歌这一点,而没有击中那些欺骗。 - Bemmu
由于OP提出问题的方式,这是谷歌现在的第一次打击。通过更好地构建问题来更容易找到答案肯定与那些寻找答案的用户体验有关。 - episodeyang


答案:


使用 检查 Python标准库中的方法(最干净,最可靠的内省方法)。

特别, inspect.getargspec(f) 返回名称 和默认值 的 f的论点 - 如果你只想要名字而不关心特殊形式 *a**k

import inspect

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

完全符合您表达的要求。


43
2017-08-19 00:45



你也可以用 return inspect.getargspec(f).args - John La Rooy
@gnibbler,true,仅适用于Python 2.6或更高版本(所以 不 如果您将Python与App Engine(或嵌入Python 2.5或更早版本的应用程序)一起使用;我给出了适用于任何Python的方法(从2.1开始 inspect 被添加到标准库中)。 - Alex Martelli
太棒了,非常感谢! - Bemmu
也许你可以编辑这个,因为现在不推荐使用getargspec,而是更喜欢inspect.signature() - Luke Murray
@juanIsaza inspect.signature(f).parameters - lovesh


>>> 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']

9
2017-08-19 00:49



注意 .args 仅适用于Python 2.6及更高版本。对于您必须使用的旧版本 [0] 代替。 - Wolph
+1提供 magical_way() 功能。 - Chinmay Kanchi