Передача словаря функции в 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 это называется "распаковка", и вы можете найти немного об этом в учебник. Документация этого отстой, я согласен, особенно из-за того, насколько фантастически полезно это.
здесь ya go-работает только любой другой iterable:
d = {'param' : 'test'}
def f(dictionary):
for key in dictionary:
print key
f(d)