3

当我运行这段代码

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'})
没有任何

但是,我期望如下,我的意思是列表参数(1,2,3)匹配*w,字典匹配**z。

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

问:出了什么问题?如何将列表和字典作为参数传递?

添加

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

似乎在工作

4

3 回答 3

7

在字典前加上两个星号:

func(10,20, 1,2,3,**{'k':'a'})
于 2010-04-26T18:13:24.430 回答
2

我不确定“输入”格式是什么,但这会起作用:

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

有了这个,你甚至不需要把 k=a 放在最后,它可以放在前两个参数之后的任何地方。然后 1,2,3 和其他“未命名”参数被填充到单星 arg 的元组中(我认为?)。

于 2010-04-26T18:18:59.550 回答
1

如果你想更加明确,你可以这样做

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

指定(向读者)您希望与每个特殊形式参数一起使用的参数。

于 2010-04-26T18:17:45.463 回答