【问题标题】:Pass in tuple to multi-argument function将元组传递给多参数函数
【发布时间】:2014-07-10 21:15:15
【问题描述】:

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

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

对于奖励积分,“*”运算符有什么作用? (这在上一篇文章中没有解释)

【问题讨论】:

标签: python tuples


【解决方案1】:

正如错误消息所述,Python 不允许您在 *arg 之后使用未命名的参数。

因此,您需要明确命名third:

>>> def producer():
...    return ('a','b')
...
>>> def consumer(first, second, third):
...    print first+second+third
...
>>> arg = producer()
>>> consumer(*arg, third='c')
abc
>>>

【讨论】:

    【解决方案2】:

    如果需要添加参数,连接元组:

    arg += ('c',)
    consumer(*arg)
    

    或者,您可以使用关键字参数显式命名参数:

    consumer(third='c', *arg)
    

    您不能在*arg 之后放置更多位置参数,这些总是添加到任何显式位置参数中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多