Передача списка и параметра типа словаря с Python - PullRequest
3 голосов
/ 26 апреля 2010

Когда я запускаю этот код

def func(x, y, *w, **z):
  print x
  print y
  if w:
      print w

  if z:
      print z
  else:
      print "None"

func(10,20, 1,2,3,{'k':'a'})

Я получаю результат следующим образом.

10
20
(1, 2, 3, {'k': 'a'})
None

Но, как я и ожидал, я имею в виду соответствие параметров списка (1,2,3) * w и словаря ** z

10
20
(1,2,3)
{'k':'a'}

В: Что пошло не так? Как передать список и словарь в качестве параметров?

Добавлена ​​

func(10,20, 10,20,30, k='a')

похоже работает

Ответы [ 3 ]

7 голосов
/ 26 апреля 2010

Поставьте две звездочки перед словарем:

func(10,20, 1,2,3,**{'k':'a'})
2 голосов
/ 26 апреля 2010

Я не уверен, что такое «входной» формат, но это будет работать:

func(10,20, 1,2,3, k='a')

При этом вам даже не нужно ставить k = a в конце, оно может быть где угодно после первых двух аргументов. Затем 1,2,3 и другие «неназванные» аргументы помещаются в кортеж (я думаю?) Для аргумента из одной звезды.

1 голос
/ 26 апреля 2010

Если вы хотите быть более явным, вы можете сделать

func(10,20,*[1,2,3],**{'k':'a'})

чтобы указать (читателю), какой аргумент вы хотите использовать с каждым параметром специальной формы.

...