当需要其他变量时如何解包元组?

How can I unpack tuple when other variables are needed?

根据 this,我可以使用包含这些参数的元组调用一个带有 N 个参数的函数,使用 f(*my_tuple).

有没有办法结合解包和解包变量?

类似于:

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

您提供的代码 (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

更新

我还应该添加另一个选项是在 * 表达式之后传入一个 named 参数(如 SyntaxError 中所述):

print(f(*a, z=3))
#-4

正如@pault 所说 - 你可以创建一个新的元组,你可以做另一件事:

*a 作为 last 变量传递给函数,例如:

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

在 Python 2.7

为我工作

有点重,但您可以使用 functools.partialf 部分应用到 a 中的参数,然后再调用 3.

上的结果可调用对象
from functools import partial

partial(f, *a)(3)

如果您计划使用来自 a 的相同两个参数对 f 进行大量调用,但第三个参数不同,这将更有用;例如:

a = (1,2)
g = partial(f, *a)
for k in some_list:
    g(k)  # Same as f(1,2,k)