【问题标题】:Matching default values to parameter name将默认值与参数名称匹配
【发布时间】:2018-10-15 01:52:37
【问题描述】:

如何使用 python 和检查将我的函数变量名称与默认值匹配?

def foo(x:int,y:int=5) -> int: return a+b

inspect.getfullargspec(foo) 
FullArgSpec(args=['x', 'y'], varargs=None, varkw=None, defaults=(4,), kwonlyargs=[], kwonlydefaults=None, annotations={'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>})

我可以获取 args 并获取默认值,但是当您尝试排列它们时,它们不是 1:1。

如果您要将两个数组压缩到字典中,x 将被映射到 4 而 y 不会映射到任何东西。但结果应该是 y=4。

谢谢

【问题讨论】:

  • defaults=(4,) 应该是defaults=(5,)

标签: python python-3.x function inspect


【解决方案1】:

您可以使用inspect.signature(),它为您的函数返回一个Signature 对象。然后,您可以轻松访问具有各自注释和默认值的参数。

In [96]: s = inspect.signature(foo)

In [97]: s.parameters
Out[97]: mappingproxy({'x': <Parameter "x: int">, 'y': <Parameter "y: int = 5">})

In [98]: s.parameters['x']
Out[98]: <Parameter "x: int">

In [99]: s.parameters['y']
Out[99]: <Parameter "y: int = 5">

或单独访问注解或默认值:

In [106]: s.parameters['y'].annotation
Out[106]: int

In [107]: s.parameters['y'].default
Out[107]: 5

【讨论】:

    猜你喜欢
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    相关资源
    最近更新 更多