This question already has answers here:
How can I read a function's signature including default argument values?
(8个答案)
7年前关闭。
为了保持我在Python中构建的几个模块的一致性,我想进行一些自动代码检查。为此,我想检查模块的功能以及功能所采用的参数。我可以使用hasattr()来检查模块是否实际包含预期的功能。到现在为止还挺好。
现在,我想看看函数采用了哪些参数。仅查看变量名就足够了。我不知道我怎么能做到这一点。有人知道我如何获得函数采用的参数名称吗?
在Python 3中,您想使用
在python 3中应该不推荐使用
Python 3.4添加了
以及更多有趣的签名选项。
(8个答案)
7年前关闭。
为了保持我在Python中构建的几个模块的一致性,我想进行一些自动代码检查。为此,我想检查模块的功能以及功能所采用的参数。我可以使用hasattr()来检查模块是否实际包含预期的功能。到现在为止还挺好。
现在,我想看看函数采用了哪些参数。仅查看变量名就足够了。我不知道我怎么能做到这一点。有人知道我如何获得函数采用的参数名称吗?
最佳答案
您可以使用 inspect.getargspec()
查看接受了哪些参数,以及关键字参数的任何默认值。
演示:
>>> def foo(bar, baz, spam='eggs', **kw): pass
...
>>> import inspect
>>> inspect.getargspec(foo)
ArgSpec(args=['bar', 'baz', 'spam'], varargs=None, keywords='kw', defaults=('eggs',))
>>> inspect.getargspec(foo).args
['bar', 'baz', 'spam']
在Python 3中,您想使用
inspect.getfullargspec()
,因为此方法支持Python 3函数自变量的新功能:>>> def foo(bar: str, baz: list, spam: str = 'eggs', *, monty: str = 'python', **kw) -> None: pass
...
>>> import inspect
>>> inspect.getfullargspec(foo)
FullArgSpec(args=['bar', 'baz', 'spam'], varargs=None, varkw='kw', defaults=('eggs',), kwonlyargs=['monty'], kwonlydefaults={'monty': 'python'}, annotations={'baz': <class 'list'>, 'return': None, 'spam': <class 'str'>, 'monty': <class 'str'>, 'bar': <class 'str'>})
在python 3中应该不推荐使用
inspect.getargspec()
。Python 3.4添加了
inspect.Signature()
object:>>> inspect.signature(foo)
<inspect.Signature object at 0x100bda588>
>>> str(inspect.signature(foo))
"(bar:str, baz:list, spam:str='eggs', *, monty:str='python', **kw) -> None"
>>> inspect.signature(foo).parameters
mappingproxy(OrderedDict([('bar', <Parameter at 0x100bd67c8 'bar'>), ('baz', <Parameter at 0x100bd6ea8 'baz'>), ('spam', <Parameter at 0x100bd69f8 'spam'>), ('monty', <Parameter at 0x100bd6c28 'monty'>), ('kw', <Parameter at 0x100bd6548 'kw'>)]))
以及更多有趣的签名选项。
关于python - 如何检查函数/方法采用哪些参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23228664/