Python: Как передать только нужные аргументы в функцию из словаря? - PullRequest
0 голосов
/ 23 октября 2018

Предположим, теперь у меня есть четко определенная функция

def f1(a):
    ...

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

D={ 'a':1 , 'b':2}

Если я назову его как

f1(**D)

, произойдет синтаксическая ошибка (потому что b не определен в f1),У меня вопрос: смогу ли я найти умный способ позволить функции найти только тот аргумент, который ей нужен?

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Вы можете использовать inspect.getargspec:

d = {'a': 5, 'b': 6, 'c': 7}
def f(a,b):
    return a + b

f(*[d[arg] for arg in inspect.getargspec(f).args])

, что дает 11.


Спасибо, Евгений, getargspec является устаревшим, вместоВы должны использовать getfullargspec, который в этом случае используется так же.

0 голосов
/ 23 октября 2018

Вы можете получить имена аргументов из кода объекта функции , а затем найти их значения в словаре:

>>> def f(a):
...     b = 2
...     return a + b
...
>>> D = {'a': 1, 'b': 2, 'c': 3}
>>> nargs = f.__code__.co_argcount
>>> varnames = f.__code__.co_varnames
>>> f(*(D[arg] for arg in varnames[:nargs]))
3
0 голосов
/ 23 октября 2018

Вот пример функции, которая получила словарь и использует только клавишу 'b':

In [14]: def f1(mydict):
    ...:     return mydict['b']
    ...: 

In [15]: x={'a': 1, 'b':2}

In [16]: f1(x)
Out[16]: 2
...