Передача словаря функции в 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   248  

4 ответа:

выяснил это для себя в конце концов. Это просто, я просто пропустил оператор**, чтобы распаковать словарь

Так что мой пример становится:

d = dict(p1=1, p2=2)
def f2(p1,p2):
    print p1, p2
f2(**d)

несколько дополнительных деталей, которые могут быть полезны, чтобы знать (вопросы, которые я имел после прочтения этого и пошел и проверил):

  1. функция может иметь параметры, которые не включено в словарь
  2. вы можете не переопределить параметр, который уже находится в словаре
  3. словарь может не есть параметры, которые не находятся в функции.

примеры каждый:

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 это называется "распаковка", и вы можете найти немного об этом в учебник. Документация этого отстой, я согласен, особенно из-за того, насколько фантастически полезно это.

здесь я иду-работает просто любой другой iterable:

d = {'param' : 'test'}

def f(dictionary):
    for key in dictionary:
        print key

f(d)