argument-passing documentação - Descompacte uma lista em Python?




ágil aplicações (4)

Acho que "descompactar" pode ser o vocabulário errado aqui - desculpas, porque tenho 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 de lista do Python sem receber 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?


Answers

Desde o Python 3.5 você pode descompactar quantidades ilimitadas de list .

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)

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

function_that_needs_strings(*my_list)

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

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

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

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

e há uma sintaxe equivalente para especificar argumentos pega-tudo em uma assinatura de função:

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments


Plugue sem vergonha, eu escrevi uma biblioteca para isso: P https://github.com/houqp/shell.py

É basicamente um invólucro para popen e shlex por enquanto. Ele também suporta comandos de tubulação para que você possa encadear comandos com mais facilidade no Python. Então você pode fazer coisas como:

ex('echo hello shell.py') | "awk '{print $2}'"




python list argument-passing