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?
function_that_needs_strings(*my_list) # works!
Oui, vous pouvez utiliser la syntaxe *args
(splat):
function_that_needs_strings(*my_list)
où 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
Depuis Python 3.5, vous pouvez décompresser une quantité illimitée de list
s.
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)