284 votes

Passer une liste à une fonction pour qu'elle agisse comme des arguments multiples

Je pense que "déballer" n'est peut-être pas le bon terme ici - je m'excuse car je suis sûr que cette question fait double emploi.

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 une 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 de développer la liste, et de passer la fonction 'red','blue','orange' sur le sabot ?

365voto

Jochen Ritzel Points 42916
function_that_needs_strings(*my_list) # works!

Vous pouvez lire tout cela ici.

51voto

Martijn Pieters Points 271458

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

function_that_needs_strings(*my_list)

my_list peut être n'importe quel itérable ; Python bouclera sur l'objet donné et utilisera chaque élément comme un argument séparé de la fonction.

Voir le documentation sur les expressions d'appel .

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

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

et il y a syntaxe équivalente pour spécifier les arguments "catch-all" dans une signature de fonction :

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

19voto

vishes_shell Points 10206

Depuis Python 3.5, vous pouvez décompresser un nombre illimité de fichiers list s.

PEP 448 - Généralités supplémentaires sur le déballage

Donc ça va marcher :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X