Соответствие значений по умолчанию имени параметра - PullRequest
0 голосов
/ 04 мая 2018

Как мне сопоставить имена переменных моих функций со значениями по умолчанию, используя 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'>})

Я могу получить аргументы и получить значения по умолчанию, но они не равны 1: 1, когда вы пытаетесь выстроить их в ряд.

Если бы вы заархивировали два массива в словарь, то х был бы сопоставлен с 4, а у не сопоставлен ни с чем. Но результат должен быть у = 4.

Спасибо

1 Ответ

0 голосов
/ 04 мая 2018

Вы можете использовать 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
...