¿Descomprimir una lista en Python?

222

Creo que "descomprimir" podría ser el vocabulario incorrecto aquí, disculpas porque estoy seguro de que esta es una pregunta duplicada.

Mi pregunta es bastante simple: en una función que espera una lista de elementos, ¿cómo puedo pasar un elemento de lista de Python sin obtener un error?

my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!

¿Seguramente debe haber una manera de expandir la lista y pasar la función 'red','blue','orange'al pie?

AP257
fuente

Respuestas:

32

Sí, puede usar la *argssintaxis (splat):

function_that_needs_strings(*my_list)

donde my_listpuede ser iterable; Python recorrerá el objeto dado y usará cada elemento como un argumento separado para la función.

Consulte la documentación de la expresión de llamada .

También hay un parámetro equivalente de palabra clave, que usa dos estrellas:

kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)

y hay una sintaxis equivalente para especificar argumentos generales en una firma de función:

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments
Martijn Pieters
fuente
14

Desde Python 3.5 puede desempacar una cantidad ilimitada de lists.

PEP 448 - Generalizaciones adicionales de desempaque

Entonces esto funcionará:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
vishes_shell
fuente
1
¿Cómo puedo hacer lo mismo con Python 2.7 o 3.4?
answerSeeker
1
@answerSeeker no es eficiente, perofunction_that_needs_strings(*(a+b))
azalea