【问题标题】:How to check if default value for python function argument is set using inspect?如何检查是否使用检查设置了python函数参数的默认值?
【发布时间】:2021-02-02 05:52:12
【问题描述】:
我正在尝试识别未设置默认值的函数的参数。我正在使用inspect.signature(func).parameters.value() 函数,它提供了函数参数列表。由于我使用的是 PyCharm,我可以看到未设置默认值的参数将其Parameter.default 属性设置为inspect._empty。我通过以下方式声明函数:
def f(a, b=1):
pass
所以,a 的默认值为inspect._empty。由于inspect._empty是私有属性,我想可能有一种方法可以检查一个值是否为inspect._empty,但我找不到。
【问题讨论】:
标签:
python
signature
inspect
【解决方案1】:
你可以这样做:
import inspect
def foo(a, b=1):
pass
for param in inspect.signature(foo).parameters.values():
if param.default is param.empty:
print(param.name)
输出:
a
param.empty 持有相同的对象inspect._empty。我想由于official documentation of inspect module 中的示例,建议使用这种方式:
Example: print all keyword-only arguments without default values:
>>>
>>> def foo(a, b, *, c, d=10):
... pass
>>> sig = signature(foo)
>>> for param in sig.parameters.values():
... if (param.kind == param.KEYWORD_ONLY and
... param.default is param.empty):
... print('Parameter:', param)
Parameter: c