Как распаковать несколько кортежей в вызове функции Если у меня есть функция def f(a, b, c, d) и два кортежа, каждый с двумя элементами, есть ли способ распаковать эти кортежи, чтобы я мог отправлять их значения в функцию? f(*tup1, *tup2) Ответ 1 От релиз Python 3.5.0, PEP 448 "Дополнительные распаковывающие обобщения" делает естественный синтаксис для этого действительного 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 Ответ 2 Другой подход с использованием chain >>> 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 Ответ 3 f(tup1[0],tup1[1],tup2[0],tup2[1]) #not good enough?
Ответ 1 От релиз Python 3.5.0, PEP 448 "Дополнительные распаковывающие обобщения" делает естественный синтаксис для этого действительного 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
Ответ 2 Другой подход с использованием chain >>> 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