Python list function argument names
有没有办法获取函数所需的参数名称?
1 2 3 4
| def foo(bar, buz):
pass
magical_way(foo) == ["bar","buz"] |
-
重复:stackoverflow.com/questions/582056/&hellip ;, stackoverflow.com/questions/218616/…
-
也许还有一个是有道理的,因为我花了半个小时试图谷歌这个没有击中那些欺骗。
-
由于OP提出问题的方式,这是谷歌现在的第一次打击。 通过更好地构建问题来更容易找到答案肯定与那些寻找答案的用户体验有关。
-
顺便说一句。 我已经知道在这里说"参数"是错误的,因为接收变量是参数,而不是参数。
使用Python标准库中的inspect模块(最干净,最可靠的方式来执行内省)。
具体来说,inspect.getargspec (f)返回f参数的名称和默认值 - 如果您只想要名称而不关心特殊形式*a,**k,
1 2 3 4
| import inspect
def magical_way(f):
return inspect.getargspec(f)[0] |
完全符合您的要求。
-
你也可以使用return inspect.getargspec(f).args
-
@gnibbler,true,仅适用于Python 2.6或更高版本(如果您使用带有App Engine的Python(或嵌入Python 2.5或更早版本的应用程序),那就不行了;我给出了适用于任何Python的方法(自2.1以来inspect是 添加到标准库)。
-
太棒了,非常感谢!
-
也许你可以编辑这个,因为现在不推荐使用getargspec,而是更喜欢inspect.signature()
-
从Python 3.6开始,不推荐使用inspect.getargspec。 相反,应该使用inspect.signature。 谁知道如何使用它?谢谢
-
@juanIsaza inspect.signature(f).parameters
-
您还可以使用"inspect.getargspec(MyClass .__ init __)[0]"检查构造函数的参数,如下所述:stackoverflow.com/a/36849919/367544
1 2 3 4 5 6 7 8 9 10 11
| >>> 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'] |
-
请注意,.args仅适用于Python 2.6及更高版本。 对于较旧的版本,您必须使用[0]。
-
+1用于提供magical_way()功能。