当需要其他变量时,如何解压缩元组?

时间:2018-12-18 14:48:53

标签: python python-2.7 iterable-unpacking

根据this,我可以使用f(*my_tuple)调用一个函数,该函数接受N个参数以及包含这些参数的元组。

有没有办法组合拆包和拆包变量?

类似的东西:

def f(x,y,z):...
a = (1,2)
f(*a, 3)

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.partialf部分应用于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中为我工作