【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-28
      • 2021-07-27
      • 2014-08-12
      • 1970-01-01
      • 2015-08-09
      • 2019-04-06
      • 2013-01-22
      相关资源
      最近更新 更多