根据this,我可以使用f(*my_tuple)
调用一个函数,该函数接受N个参数以及包含这些参数的元组。
有没有办法组合拆包和拆包变量?
类似的东西:
def f(x,y,z):...
a = (1,2)
f(*a, 3)
答案 0 :(得分:4)
您提供的代码(f(*a, 3)
)对python 3有效。对于python 2,您可以通过添加额外的值来创建新的元组。然后解压缩新的元组。
例如,如果您具有以下功能f
:
def f(x, y, z):
return x*y - y*z
print(f(1,2,3))
#-4
尝试执行代码会导致python 2错误:
a = (1,2)
print(f(*a,3))
#SyntaxError: only named arguments may follow *expression
所以只需新建一个tuple
:
new_a = a + (3,)
print(f(*new_a))
#-4
更新
我还应该添加另一种选择,就是在*
表达式(如SyntaxError
中所述)后传递 named 参数:
print(f(*a, z=3))
#-4
答案 1 :(得分:2)
有点沉重,但是您可以使用functools.partial
将f
部分应用于a
中的参数,然后在3上调用结果可调用对象。
from functools import partial
partial(f, *a)(3)
如果您打算使用f
中相同的两个参数,但使用不同的第三个参数来对a
进行大量调用,则此方法将更为有用。例如:
a = (1,2)
g = partial(f, *a)
for k in some_list:
g(k) # Same as f(1,2,k)
答案 2 :(得分:0)
如@pault所说-您可以创建一个新的元组,并且可以做另一件事:
将*a
作为 last 变量传递给函数,例如:
def f(x,y,z):...
a = (1,2)
f(3, *a)
在Python 2.7中为我工作