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

标签 python signature inspect

我正在尝试识别未设置默认值的函数参数。我正在使用 inspect.signature(func).parameters.value() 函数,它给出了函数参数列表。由于我使用的是 PyCharm,我可以看到未设置默认值的参数将其 Parameter.default 属性设置为 inspect._empty。我通过以下方式声明函数:

def f(a, b=1):
    pass

因此,a 的默认值是inspect._empty。由于 inspect._empty 是一个私有(private)属性,我想可能有一种方法可以检查一个值是否为 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

关于python - 如何检查是否使用检查设置了 python 函数参数的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64427593/

相关文章:

python - tensorflow 线性分类器未训练

python - pytorch 中的 tf.cast 等价物?

c++ - 在以函数为参数的模板函数中提取输入参数的类型

c# - 是否有类似于 hawkeye 的 UI 检查器工具可与 .net 4.5 一起使用?

python - 我的 Python 尝试通过 Gmail 通过 SMTP 发送邮件有什么问题? SSL 包装器似乎不起作用

python - 使用 Hough Circle 变换从图像中检测圆

php - 使用 PGP/MIME 签署多部分邮件

java - 以 'new Class()' 作为参数的方法签名

javascript - javascript/node.js 中是否有与 python 的 inspect.getargspec 等效的东西?

node.js - 为什么 Chrome 无法检查 Docker 容器中的 nodejs 代码?