将默认值与参数名称匹配

时间:2018-05-04 14:24:24

标签: python python-3.x function inspect

如何使用python和inspect?

将函数变量名称与默认值匹配
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.

由于

1 个答案:

答案 0 :(得分:2)

您可以使用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