Come posso esplodere una tupla in modo che possa essere passato come una lista di parametri?
-
02-10-2019 - |
Domanda
dire Let ho una definizione di metodo come questo:
def myMethod(a, b, c, d, e)
Poi, ho una variabile e una tupla come questo:
myVariable = 1
myTuple = (2, 3, 4, 5)
C'è un modo posso passare esplodere la tupla in modo che possa passare i suoi membri come parametri? Qualcosa di simile (anche se so che questo non funzionerà come l'intera tupla è considerato il secondo parametro):
myMethod(myVariable, myTuple)
mi piacerebbe evitare di riferimento a ciascun membro tupla individualmente se possibile ...
Soluzione
Stai cercando il argomento disimballaggio *
operator:
myMethod(myVariable, *myTuple)
Altri suggerimenti
La situazione inversa si verifica quando il argomenti sono già in un elenco o tuple, ma devono essere decompressi per un funzione di chiamata richiede separato argomenti posizionali. Per esempio, incorporato range) aspetta funzionali ( Start e Stop argomenti separati. Se essi non sono disponibili separatamente, scrivere la chiamata di funzione con la * -Operator per decomprimere gli argomenti di una lista o tupla:
>>> 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]
Allo stesso modo, può dizionari fornire argomenti a parola chiave con la ** - operatore:
>>> 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 !