Descompactar uma lista em Python?

222

Acho que 'descompactar' pode ser o vocabulário errado aqui - desculpe-me por ter certeza de que essa é uma pergunta duplicada.

Minha pergunta é bem simples: em uma função que espera uma lista de itens, como posso passar um item da lista Python sem obter um erro?

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

Certamente deve haver uma maneira de expandir a lista e passar a função 'red','blue','orange'no casco?

AP257
fonte

Respostas:

32

Sim, você pode usar a *argssintaxe (splat):

function_that_needs_strings(*my_list)

onde my_listpode ser iterável; O Python fará um loop sobre o objeto especificado e usará cada elemento como um argumento separado para a função.

Consulte a documentação da expressão de chamada .

Também há um parâmetro de palavra-chave equivalente, usando duas estrelas:

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

e existe uma sintaxe equivalente para especificar argumentos gerais em uma assinatura de função:

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

Desde o Python 3.5, você pode descompactar uma quantidade ilimitada de lists.

PEP 448 - Generalizações adicionais de desempacotamento

Então, isso vai funcionar:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
vishes_shell
fonte
1
como posso fazer o mesmo com python 2.7 ou 3.4?
answerSeeker
1
@answerSeeker não é eficiente, masfunction_that_needs_strings(*(a+b))
azalea