【发布时间】:2019-10-28 20:37:41
【问题描述】:
我有一个函数,f:
def f(required_arg, optional_arg=None):
pass
如何返回f 的必需参数名称列表?
在inspect.signature 的结果上使用isinstance 似乎不起作用:
>>> import inspect
>>> params = inspect.signature(f).parameters
>>> for arg_name, v in params.items():
>>> print(v.default)
>>> print(arg_name, isinstance(v.default, inspect._empty))
>>> print(arg_name, isinstance(v.default, inspect.Parameter.empty))
<class 'inspect._empty'>
required_arg False
required_arg False
None
optional_arg False
optional_arg False
【问题讨论】:
-
@GreekCloakGuy 是的,在我的情况下这根本行不通。我正在开发一个 unittest 元类,它动态添加测试并且需要知道需要哪些参数,以便如果参数未包含在类定义中,我可以自动使特定测试失败。
-
经过一些测试,您是否尝试过检查
v.default == inspect._empty而不是isinstance(v.default, inspect._empty)?如,值实际上是类本身,而不是类的实例,或者从我的一些实验看来是这样 -
@GreenCloakGuy 是的,谢谢。我猜推荐的方法是使用
is而不是==,但我想不出使用比较有什么缺点。
标签: python python-3.x