使用Python传递列表和字典类型参数

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'})
None
但是,我期望的结果如下,即列表参数(1,2,3)匹配*w,字典匹配**z。
10
20
(1,2,3)
{'k':'a'}
问:出了什么问题?我该如何将列表和字典作为参数传递?

Added

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

看起来正在运作


1
像我一样不熟悉 *** 语法的人,可以参考这个链接:https://dev59.com/eXM_5IYBdhLWcg3w-4hg#1141556 - Jonik
3个回答

7
在字典前面加上两个星号:
func(10,20, 1,2,3,**{'k':'a'})

1
这就是 OP 想要的。 - Michael Herold

2
我不确定“输入”格式是什么,但这将起作用:
func(10,20, 1,2,3, k='a')

有了这个,您甚至不需要在末尾放置k=a,它可以在前两个参数之后的任何位置。然后,1,2,3和其他“未命名”的参数将被放入元组中(我认为是这样?)以供单星号参数使用。


1
如果你想更加明确,你可以这样做。
func(10,20,*[1,2,3],**{'k':'a'})

为了指定(给读者)每个特殊形式参数要使用的参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接