如何检查是否使用检查设置了 python 函数参数的默认值?
How to check if default value for python function argument is set using inspect?
我正在尝试识别未设置默认值的函数参数。我正在使用 inspect.signature(func).parameters.value()
函数,它给出了函数参数列表。由于我使用的是 PyCharm,我可以看到未设置默认值的参数将其 Parameter.default
属性设置为 inspect._empty
。我通过以下方式声明函数:
def f(a, b=1):
pass
因此,a
的默认值为inspect._empty
。由于 inspect._empty
是一个私有属性,我想可能有一种方法可以检查一个值是否为 inspect._empty
,但我找不到它。
你可以这样做:
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
我正在尝试识别未设置默认值的函数参数。我正在使用 inspect.signature(func).parameters.value()
函数,它给出了函数参数列表。由于我使用的是 PyCharm,我可以看到未设置默认值的参数将其 Parameter.default
属性设置为 inspect._empty
。我通过以下方式声明函数:
def f(a, b=1):
pass
因此,a
的默认值为inspect._empty
。由于 inspect._empty
是一个私有属性,我想可能有一种方法可以检查一个值是否为 inspect._empty
,但我找不到它。
你可以这样做:
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