Déballer une liste en Python?

222

Je pense que «décompresser» pourrait être le mauvais vocabulaire ici - excuses parce que je suis sûr que c'est une question en double.

Ma question est assez simple: dans une fonction qui attend une liste d'éléments, comment puis-je passer un élément de liste Python sans obtenir d'erreur?

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

Il doit sûrement y avoir un moyen d'élargir la liste et de passer la fonction 'red','blue','orange'sur le sabot?

AP257
la source

Réponses:

32

Oui, vous pouvez utiliser la *argssyntaxe (splat):

function_that_needs_strings(*my_list)

my_listpeut être tout itérable; Python bouclera sur l'objet donné et utilisera chaque élément comme argument séparé de la fonction.

Voir la documentation des expressions d'appel .

Il existe également un équivalent de paramètre de mot clé, utilisant deux étoiles:

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

et il existe une syntaxe équivalente pour spécifier les arguments fourre-tout dans une signature de fonction:

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

Depuis Python 3.5, vous pouvez déballer une quantité illimitée de lists.

PEP 448 - Généralisations de déballage supplémentaires

Cela fonctionnera donc:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
vishes_shell
la source
1
comment puis-je faire de même avec python 2.7 ou 3.4?
answerSeeker
1
@answerSeeker pas efficace, maisfunction_that_needs_strings(*(a+b))
azalée