Einführung in Python mit Listen als Standardparameter in Funktionen (Codebeispiel)

不言
Freigeben: 2019-01-28 10:22:40
nach vorne
2878 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine Einführung in die Verwendung von Listen als Standardparameter in Python-Funktionen. Ich hoffe, er wird Ihnen als Referenz dienen.

In diesem Artikel wird eine Falle von Python vorgestellt, auf die der Autor bei der Arbeit gestoßen ist, nämlich die Verwendung von Listen als Standardparameter.

Wir wissen, dass Listen in Python veränderbare Objekte sind, sodass sich der Inhalt der Liste innerhalb der Funktion ändern kann. Zu beachten ist auch, wie sich der Inhalt der Liste ändert, wenn eine Liste als Standardparameter einer Funktion verwendet wird.

Schauen wir uns zunächst das folgende Codebeispiel an:

def add(x, lst=[]):
    if x not in lst:
        lst.append(x)

    return lst

def main():
    list1 = add(1)
    print(list1)

    list2 = add(2)
    print(list2)

    list3 = add(3, [11, 12, 13, 14])
    print(list3)

    list4 = add(4)
    print(list4)

main()
Nach dem Login kopieren

Sie denken vielleicht, dass das Ausgabeergebnis wie folgt lautet:

[1]
[2]
[11, 12, 13, 14, 3]
[4]
Nach dem Login kopieren
Nach dem Login kopieren

Aber tatsächlich ist es das Ausgabeergebnis dieses Programms ist:

[1]
[1, 2]
[11, 12, 13, 14, 3]
[1, 2, 4]
Nach dem Login kopieren

Warum ist das so? Die Funktion der Funktion add besteht darin, x an die Liste lst anzuhängen, wenn x nicht in der Liste enthalten ist. Bei der ersten Ausführung der Funktion wird der Standardwert [] des Parameters lst erstellt. Dieser Standardwert wird nur einmal erstellt. add(1) fügt 1 zu lst hinzu. Wenn die Funktion erneut aufgerufen wird, ist lst [1] statt [], da lst nur einmal erstellt wird. Wenn die lst des Parameters [11,12,13,14] ist, ist die lst [11,12,13,14]. Wenn list4 die Funktion aufruft, werden die Standardparameter verwendet, sodass der Standardparameter lst jetzt [1,2] ist.
Um die Aufrufsituation besser zu verstehen, können Sie die ID von lst in der Add-Funktion ausgeben, z. B. den folgenden Code:

def add(x, lst=[]):
    print(id(lst))

    if x not in lst:
        lst.append(x)
    
    return lst

def main():
    list1 = add(1)
    print(list1)

    list2 = add(2)
    print(list2)

    list3 = add(3, [11, 12, 13, 14])
    print(list3)

    list4 = add(4)
    print(list4)

main()
Nach dem Login kopieren

Das Ausgabeergebnis lautet wie folgt:

4469603648
[1]
4469603648
[1, 2]
4469670472
[11, 12, 13, 14, 3]
4469603648
[1, 2, 4]
Nach dem Login kopieren

Sie können sehen, list1, list2, die ID des Standardparameters hat sich beim Aufruf von list4 nicht geändert, aber die ID von list3 hat sich geändert.
Dies ist eine Falle von Python, wenn es Listen als Standardparameter verwendet. Wie kann man also vermeiden, in Fallstricke zu tappen? Wenn Sie bei jedem Aufruf der Funktion die Standardliste [] verwenden möchten, können Sie die Funktionsparameter wie im folgenden Programm ändern:

def add(x, lst=None):

    if lst is None:
        lst = []
    if x not in lst:
        lst.append(x)

    return lst

def main():
    list1 = add(1)
    print(list1)

    list2 = add(2)
    print(list2)

    list3 = add(3, [11, 12, 13, 14])
    print(list3)

    list4 = add(4)
    print(list4)

main()
Nach dem Login kopieren

Das Ausgabeergebnis lautet wie folgt:

[1]
[2]
[11, 12, 13, 14, 3]
[4]
Nach dem Login kopieren
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEinführung in Python mit Listen als Standardparameter in Funktionen (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage