2024-05-18 06:33:26 发布
网友
为了保持我在Python中构建的几个模块的一致性,我想做一些自动化的代码检查。为此,我想检查模块的函数和函数的参数。我可以使用hasattr()检查模块是否实际包含预期的函数。到现在为止,一直都还不错。
我现在想看看函数采用的参数。只要看到变量名就足够了。但我不知道我怎么能做到这一点。有人知道我如何得到一个函数的参数名吗?
您可以使用^{}查看接受哪些参数,以及关键字参数的任何默认值。
演示:
>>> 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中,您希望使用^{},因为此方法支持新的python3函数参数特性:
>>> 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()应该被视为不推荐使用。
inspect.getargspec()
Python 3.4添加了^{} 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 3中,您希望使用^{} ,因为此方法支持新的python3函数参数特性:
在Python 3中,
inspect.getargspec()
应该被视为不推荐使用。Python 3.4添加了^{} object :
还有更多有趣的签名选择。
相关问题 更多 >
编程相关推荐