2010-07-07 9 views
17

Digamos que tengo una definición método como este:¿Cómo puedo explotar una tupla para que se pueda pasar como una lista de parámetros?

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

Entonces, tengo una variable y una tupla como esto:

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

¿Hay alguna manera de que pueda pasar a explotar la tupla de manera que Puedo pasar sus miembros como parámetros? Algo como esto (aunque sé que esto no va a funcionar como toda la tupla es considerado el segundo parámetro):

myMethod(myVariable, myTuple) 

me gustaría evitar hacer referencia a cada miembro individual tupla si es posible ...

+0

duplicado posible de [Expansión de tuplas en argumentos] (https://stackoverflow.com/questions/1993727/expanding-tuples-into-arguments) –

Respuesta

33

que busca la argument unpacking operador *:

myMethod(myVariable, *myTuple) 
+2

También funciona para listas (para el beneficio del OP) –

+0

También funciona para iteradores. – unutbu

+0

¡Agradable, gracias! (Pensé que había leído sobre un método ... todavía bastante nuevo en Python y no estaba seguro de cómo buscarlo). – froadie

7

Desde el Python documentation:

La situación inversa ocurre cuando los argumentos ya están en una lista o tupla pero deben desempaquetarse para una llamada a función que requiere argumentos posicionales separados . Por ejemplo, la función incorporada de rango() espera argumentos de inicio y finalización separados. Si que no están disponibles por separado, escribir la llamada a la función con el * -operator para desempaquetar los argumentos de 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] 

De la misma manera, los diccionarios pueden entregar argumentos de palabra clave con la ** - operador:

>>> 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 ! 
Cuestiones relacionadas