将元组扩展为参数
有没有办法将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名称,如tuple
, list
, file
, set
等等 – 这是一个可怕的做法,它会回来,当你最不期待的时候,你会得到字节积极避免用自己的标识符隐藏内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
调用。