如何检查是否使用检查设置了 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