Déballer une liste en Python?

je pense que 'unpack' 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'étendre la liste, et passer la fonction 'red','blue','orange' sur le sabot?

137
demandé sur Martijn Pieters 2010-08-13 23:40:06

3 réponses

function_that_needs_strings(*my_list) # works!

vous pouvez tout lire à ce sujet ici.

178
répondu Jochen Ritzel 2014-08-08 18:23:36

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

function_that_needs_strings(*my_list)

my_list peut être n'importe quel itérable; Python boucle sur l'objet donné et utilise chaque élément comme argument séparé à la fonction.

Voir la appel expression de la documentation .

il y a un équivalent mot-clé-paramètre aussi bien, en utilisant deux étoiles:

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

et il y a l'équivalent de la syntaxe pour la spécification de fourre-tout des arguments dans une fonction de signature:

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments
19
répondu Martijn Pieters 2017-05-23 12:26:32

depuis Python 3.5, vous pouvez déballer un montant illimité de list s.

PEP 448-généralisations supplémentaires sur le déballage

donc ça va marcher:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
7
répondu vishes_shell 2016-09-04 19:11:35