这里的问题是我想将一个元组作为参数传递给第二个函数。之前有“重复!”的呐喊!我已经查看过有关类似问题的帖子Expanding tuples into arguments
以下是我正在测试的代码:
def producer():
return ('a','b')
def consumer(first, second, third):
print first+second+third
arg = producer()
consumer(*arg, 'c') # expected abc
这会输出错误:
There's an error in your program *** only named arguments may follow *expression
这个有用的错误消息导致将参数的顺序切换为consumer('c', *arg)
,但这并不能解决问题,因为它会输出'cab'
。
所以我的问题是,是否有更好的方法将元组传递给多参数函数,并保留排序?
另外,对于奖励积分,“*”运算符会做什么? (这在前一篇文章中没有解释)
答案 0 :(得分:6)
正如错误消息所述,Python不允许您在*arg
之后拥有未命名的参数。
因此,您需要明确命名third
:
>>> def producer():
... return ('a','b')
...
>>> def consumer(first, second, third):
... print first+second+third
...
>>> arg = producer()
>>> consumer(*arg, third='c')
abc
>>>
答案 1 :(得分:1)
如果需要添加参数,请连接元组:
arg += ('c',)
consumer(*arg)
或者,您可以使用关键字参数显式命名参数:
consumer(third='c', *arg)
你不能在*arg
之后放置更多的位置参数,这些参数总是被添加到任何显式的位置参数中。