Eine Liste in Python entpacken?

222

Ich denke, "Auspacken" könnte hier das falsche Vokabular sein - Entschuldigung, weil ich sicher bin, dass dies eine doppelte Frage ist.

Meine Frage ist ziemlich einfach: Wie kann ich in einer Funktion, die eine Liste von Elementen erwartet, ein Python-Listenelement übergeben, ohne einen Fehler zu erhalten?

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

Sicherlich muss es eine Möglichkeit geben, die Liste zu erweitern und die Funktion 'red','blue','orange'an den Huf zu übergeben?

AP257
quelle

Antworten:

32

Ja, Sie können die *args(Splat-) Syntax verwenden:

function_that_needs_strings(*my_list)

wo my_listkann jeder iterierbar sein; Python durchläuft das angegebene Objekt und verwendet jedes Element als separates Argument für die Funktion.

Siehe die Dokumentation zum Anrufausdruck .

Es gibt auch ein Keyword-Parameter-Äquivalent mit zwei Sternen:

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

und es gibt eine äquivalente Syntax zum Angeben von Catch-All-Argumenten in einer Funktionssignatur:

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

Seit Python 3.5 können Sie unbegrenzt viele entpacken list s .

PEP 448 - Zusätzliche Generalisierungen zum Entpacken

Das wird also funktionieren:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
vishes_shell
quelle
1
Wie kann ich dasselbe mit Python 2.7 oder 3.4 machen?
answerSeeker
1
@answerSeeker nicht effizient, aberfunction_that_needs_strings(*(a+b))
Azalee