如何使用检查检查 python 函数参数的默认值是否设置?

Pus*_*kar 7 python signature inspect

我正在尝试识别未设置默认值的函数的参数。我正在使用inspect.signature(func).parameters.value()提供函数参数列表的函数。由于我使用的是 PyCharm,因此我可以看到未设置默认值的参数的属性设置Parameter.defaultinspect._empty. 我通过以下方式声明该函数:

def f(a, b=1):
    pass
Run Code Online (Sandbox Code Playgroud)

因此, 的默认a值为inspect._empty。由于inspect._empty是 一个私有属性,我认为可能有一种方法可以检查值是否为inspect._empty,但我找不到它。

san*_*ash 11

你可以这样做:

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)
Run Code Online (Sandbox Code Playgroud)

输出:

a
Run Code Online (Sandbox Code Playgroud)

param.empty持有同一个物体inspect._empty。我认为推荐这种使用方式是因为检查模块官方文档中的示例:

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
Run Code Online (Sandbox Code Playgroud)