Ответ 1
Вы ищете аргумент распаковывать оператор *
:
myMethod(myVariable, *myTuple)
Скажем, у меня есть определение метода следующим образом:
def myMethod(a, b, c, d, e)
Затем у меня есть переменная и кортеж:
myVariable = 1
myTuple = (2, 3, 4, 5)
Есть ли способ, которым я могу пройти, взорвать кортеж, чтобы я мог передавать его члены в качестве параметров? Что-то вроде этого (хотя я знаю, что это не сработает, так как весь кортеж считается вторым параметром):
myMethod(myVariable, myTuple)
Я хотел бы избежать ссылки на каждый член кортежа индивидуально, если это возможно...
Вы ищете аргумент распаковывать оператор *
:
myMethod(myVariable, *myTuple)
Обратная ситуация возникает, когда аргументы уже находятся в списке или но необходимо распаковать вызов функции, требующий отдельного позиционные аргументы. Например, функция встроенного диапазона() ожидает отдельные аргументы запуска и остановки. Если они не доступны отдельно, напишите вызов функции с помощью * -оператор для распаковки аргументов из списка или кортежа:
>>> 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 bleedin' demised !