在Python中传递列表和字典类型参数

3 投票
3 回答
3376 浏览
提问于 2025-04-15 22:02

当我运行这段代码时

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 个回答

1

如果你想让事情更清楚明白,可以这样做:

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

这样可以告诉别人,你想把哪个参数和每个特殊形式的参数对应起来。

2

我不太确定“输入”的格式是什么,但这个方法可以用:

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

用这个方法,你甚至不需要把 k=a 放在最后,它可以放在前两个参数之后的任何地方。然后,像 1、2、3 这些没有名字的参数会被放进一个元组里(我想是这样?)作为单星参数。

7

在字典前面加两个星号:

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

撰写回答