当需要其他变量时如何解包元组?
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.partial
将 f
部分应用到 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)
根据 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.partial
将 f
部分应用到 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)