web-dev-qa-db-fra.com

Déballer une liste en Python?

Je pense que "décompresser" pourrait ne pas être le bon vocabulaire - des excuses, car je suis sûr que cette question est répétée.

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?

180
AP257
function_that_needs_strings(*my_list) # works!

Vous pouvez lire tout à ce sujet ici.

232
Jochen Ritzel

Oui, vous pouvez utiliser la syntaxe *args (splat):

function_that_needs_strings(*my_list)

my_list peut être quelconque, Python fera une boucle sur l'objet donné et utilisera chaque élément comme argument séparé de la fonction.

Voir le documentation sur l'expression d'appel .

Il existe également un équivalent mot-clé, utilisant deux étoiles:

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

et il y a syntaxe équivalente pour spécifier des arguments fourre-tout dans une signature de fonction:

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

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

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

Donc cela fonctionnera:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
9
vishes_shell