将元组传递给多参数函数

时间:2014-07-10 21:15:16

标签: python tuples

这里的问题是我想将一个元组作为参数传递给第二个函数。之前有“重复!”的呐喊!我已经查看过有关类似问题的帖子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'

所以我的问题是,是否有更好的方法将元组传递给多参数函数,并保留排序?

另外,对于奖励积分,“*”运算符会做什么? (这在前一篇文章中没有解释)

2 个答案:

答案 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之后放置更多的位置参数,这些参数总是被添加到任何显式的位置参数中。