Python: как передать в функцию только необходимые аргументы из словаря?

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

def f1(a):
    ...

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

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

Если я назову это как

f1(**D)

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

Добро пожаловать в StackOverflow. Пожалуйста, прочтите и следуйте инструкциям по публикации в справочной документации, как было предложено при создании этой учетной записи. Здесь применяются По теме, как спросить и ... идеальный вопрос.

Prune 23.10.2018 21:06

Что нужно от словаря для вашей функции? Собираетесь ли вы использовать словарь целиком? Отображение того, какие действия вы хотите, чтобы выполняла ваша функция, очень помогло бы

vash_the_stampede 23.10.2018 21:06

Какой тип параметра ожидает функция? Какой аргумент из словаря вы хотите передать?

Prune 23.10.2018 21:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
343
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

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

Я не голосовал против, но вы не должны использовать dict в качестве имени переменной, потому что он затеняет встроенный

Ralf 23.10.2018 21:12
Ответ принят как подходящий

Вы можете использовать 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, который в данном случае используется точно так же.

Deprecated since version 3.0: Use getfullargspec() for an updated API that is usually a drop-in replacement, but also correctly handles function annotations and keyword-only parameters.
Eugene Yarmash 24.10.2018 15:09

@EugeneYarmash THanls

Joe Iddon 24.10.2018 15:14

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

>>> 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

Другие вопросы по теме