Meine Python-Liste erinnert sich an den letzten Aufruf

Lernfragen und Praxis · 4 Antworten

STARTBEITRAG

#1
python
def sammeln(wert, liste=[]):
    liste.append(wert)
    return liste

Zweimal ohne zweite Angabe aufgerufen, und die alte Eingabe hängt noch drin. Die Liste hat ein besseres Gedächtnis als ich. Warum wird sie nicht bei jedem Aufruf neu gebaut?

0

Antworten

4
Antwort auf das Thema
#2

Der Default-Ausdruck wird bei der Funktionsdefinition ausgewertet. Du verwendest deshalb dasselbe Listenobjekt weiter.

0
Antwort auf Antwort

Antwort auf #2 von buildfehler

Der Default-Ausdruck wird bei der Funktionsdefinition ausgewertet. Du verwendest deshalb dasselbe Listenobjekt weiter.
#3

Also liste=None und innen neu anlegen? Oder schiebe ich das Problem damit nur eine Zeile weiter?

0
Also liste=None und innen neu anlegen? Oder schiebe ich das Problem damit nur eine Zeile weiter?
#4

Das ist der übliche Ansatz: if liste is None: liste = []. Diese neue Liste wird dann in genau diesem Aufruf erzeugt. Eine ausdrücklich übergebene Liste wird weiterhin verändert; das sollte zur Funktion passen.

0
Der Default-Ausdruck wird bei der Funktionsdefinition ausgewertet. Du verwendest deshalb dasselbe Listenobjekt weiter.
#5

Das erklärt einiges. Ich hatte die Funktion zum Testen neu definiert und dachte danach, der Fehler sei weg. War wohl nur die Liste wieder leer.

0