Как я могу взорвать кортеж так, чтобы он мог быть передан как список параметров?

Скажем, у меня есть определение метода как это:

def myMethod(a, b, c, d, e)

Затем у меня есть переменная и кортеж как это:

myVariable = 1
myTuple = (2, 3, 4, 5)

Существует ли способ, которым я могу передать, взрывают кортеж так, чтобы я мог передать его участников как параметры? Что-то вроде этого (хотя я знаю это, не будет работать всем кортежем, считают вторым параметром):

myMethod(myVariable, myTuple)

Я хотел бы постараться не ссылаться на каждого участника кортежа индивидуально, если это возможно...

20
задан SilentGhost 8 July 2010 в 14:24
поделиться

2 ответа

Вы ищете аргумент распаковки оператор * :

myMethod(myVariable, *myTuple)
37
ответ дан 29 November 2019 в 23:36
поделиться

Из документации по Python:

Обратная ситуация возникает, когда аргументы уже находятся в списке или кортеж, но должны быть распакованы для вызова функции, требующей отдельных позиционных аргументов. Например, встроенная функция range() ожидает отдельные аргументы start и stop. Если они не доступны отдельно, запишите вызов функции с помощью *-оператором для распаковки аргументов из списка или кортежа:

>>> range(3, 6)             # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)            # call with arguments unpacked from a list
[3, 4, 5]

Таким же образом словари могут передавать аргументы ключевых слов с помощью **-оператором:

>>> def parrot(voltage, state='a stiff', action='voom'):
...     print "-- This parrot wouldn't", action,
...     print "if you put", voltage, "volts through it.",
...     print "E's", state, "!"
...
>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
>>> parrot(**d)
-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
7
ответ дан 29 November 2019 в 23:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: