Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在函数调用中解包多个元组_Python_Tuples - Fatal编程技术网

Python 如何在函数调用中解包多个元组

Python 如何在函数调用中解包多个元组,python,tuples,Python,Tuples,如果我有一个函数def(a,b,c,d)和两个元组,每个元组有两个元素,有没有办法解压这些元组以便我可以将它们的值发送给函数 f(*tup1, *tup2) 截至,使用此有效Python的自然语法: >>> f(*tup1, *tup2) 1 2 2 3 在较早版本的Python中,您可能需要将元组连接在一起以提供单个扩展参数: >>> tup1 = 1, 2 >>> tup2 = 2, 3 >>> def f(a, b

如果我有一个函数
def(a,b,c,d)
和两个元组,每个元组有两个元素,有没有办法解压这些元组以便我可以将它们的值发送给函数

f(*tup1, *tup2)
截至,使用此有效Python的自然语法:

>>> f(*tup1, *tup2)
1 2 2 3
在较早版本的Python中,您可能需要将元组连接在一起以提供单个扩展参数:

>>> tup1 = 1, 2
>>> tup2 = 2, 3
>>> def f(a, b, c, d):
        print(a, b, c, d)

>>> f(*tup1+tup2)
1 2 2 3

使用
链的另一种方法

>>> from itertools import chain
>>> def foo(a,b,c,d):
        print a,b,c,d


>>> tup1 = (1,2)
>>> tup2 = (3,4)
>>> foo(*chain(tup1,tup2))
1 2 3 4

如果tup1的长度为4,那么tup2是否会被忽略?这是期望的行为吗?@Spacedman否,将发送6个值,并且您将得到一个错误(或者它将适用于包含6个参数的函数)。是的,但是如果两个元组加起来长度为4,它将起作用,但会掩盖一个微妙的错误。我总是更喜欢显式解包。我认为这与询问者提交的psuedo代码最接近。他想要一种从两个元组中解包所有值的方法,这就是我的答案给出的行为。虽然存在潜在的错误,但所有的方法都有,这更多的是程序的设计问题。@Lattyware是正确的,但根据我的测试,对于两个元组,您的解决方案是最快的。我也觉得这应该可以工作。在函数调用中只允许一个*和**表达式扩展参数对我来说似乎是一个不必要的限制。同样,只允许在列表末尾使用它。这种限制在实践中导致围绕函数调用的元组和dict构建代码混乱。看见