Передача словаря функции в python в качестве параметров ключевого слова
Я хотел бы вызвать функцию в python с помощью словаря.
вот код:
d = dict(param='test')
def f(param):
print param
f(d)
это выводит {'param': 'test'}
но я бы хотел, чтобы просто печатать test
.
Я хотел бы, чтобы он работал аналогично для большего количества параметров:
d = dict(p1=1, p2=2)
def f2(p1,p2):
print p1, p2
f2(d)
это возможно?
4 ответа:
выяснил это для себя в конце концов. Это просто, я просто пропустил оператор**, чтобы распаковать словарь
Так что мой пример становится:
d = dict(p1=1, p2=2) def f2(p1,p2): print p1, p2 f2(**d)
несколько дополнительных деталей, которые могут быть полезны, чтобы знать (вопросы, которые я имел после прочтения этого и пошел и проверил):
- функция может иметь параметры, которые не включено в словарь
- вы можете не переопределить параметр, который уже находится в словаре
- словарь может не есть параметры, которые не находятся в функции.
примеры каждый:
def mytest(a=4, b=2): print a, b
номер 1: функции могут иметь параметры, которые не включены в словарь
In[6]: mydict = {'a': 100} In[7]: mytest(**mydict) 100 2
номер 2: вы не можете переопределить параметр, который уже есть в словаре
In[8]: mydict = {'a': 100, 'b': 200} In[9]: mytest(a=3, **mydict) TypeError: mytest() got multiple values for keyword argument 'a'
номер 3: словарь не может иметь параметры, которые не находятся в функции.
In[10]: mydict = {'a': 100, 'b': 200, 'c': 300} In[11]: mytest(**mydict) TypeError: mytest() got an unexpected keyword argument 'c'
в python это называется "распаковка", и вы можете найти немного об этом в учебник. Документация этого отстой, я согласен, особенно из-за того, насколько фантастически полезно это.