将元组扩展为参数

有没有办法将Python元组扩展到一个函数 – 作为实际参数?

例如,这里的expand()是不可思议的:

 tuple = (1, "foo", "bar") def myfun(number, str1, str2): return (number * 2, str1 + str2, str2 + str1) myfun(expand(tuple)) # (2, "foobar", "barfoo") 

我知道一个人可以将myfun定义为myfun((a, b, c)) ,但是当然可能有遗留代码。 谢谢

myfun(*tuple) 完全符合你的要求。

小问题: 不要使用你的标识符内置types名称,如tuplelistfileset等等 – 这是一个可怕的做法,它回来,当你最不期待的时候,你得到字节积极避免用自己的标识符隐藏内build名字的习惯。

请注意,您也可以扩展参数列表的一部分:

 myfun(1, *("foo", "bar")) 

看看Python教程部分4.7.3和4.7.4。 它谈论传递元组作为参数。

我也会考虑使用命名参数(并传递一个字典),而不是使用一个元组并传递一个序列。 当位置不直观或有多个参数时,我发现使用位置参数是一个不好的做法。

这是函数式编程方法。 它提升元组展开function的语法糖:

apply_tuple = lambda f, t: f(*t)

用法示例:

 from toolz import * from operator import add, eq apply_tuple = curry(apply_tuple) thread_last( [(1,2), (3,4)], (map, apply_tuple(add)), list, (eq, [3, 7]) ) # Prints 'True' 

apply_tuple curry apply_tuple保存了大量的partial调用。