Problem bei der Übertragung von Funktionswerten
Schauen wir uns zunächst ein Beispiel an:
# -*- coding: UTF-8 -*- def chagne_number( b ): b = 1000 b = 1 chagne_number(b) print( b )
Das endgültige Ausgabeergebnis ist:
1
Einige Leute hier haben möglicherweise Fragen: Warum wird der Wert von b nicht durch die Funktion chagne_number geändert? Warum gibt es keine Änderung und das Ausgabeergebnis ist immer noch 1? Dieses Problem wird in vielen Programmiersprachen diskutiert und die Erklärung des Prinzips ist ähnlich.
Hier geht es hauptsächlich um die Übertragung von Funktionsparametern, bei denen es sich um Typobjekte handelt. Die grundlegenden Datentypen in Python wurden ebenfalls zuvor eingeführt. Diese Typobjekte können in veränderbare Typen und unveränderliche Typen unterteilt werden.
In Python sind Zeichenfolgen, Ganzzahlen, Gleitkommatypen und Tupel unveränderliche Objekte, während Listen, Diktate usw. geändert werden können.
Zum Beispiel:
Unveränderbarer Typ: Die Variablenzuweisung a = 1 generiert tatsächlich ein ganzzahliges Objekt 1, und dann zeigt die Variable a auf 1, wenn a = 1000 In Tatsache ist, dass ein weiteres ganzzahliges Objekt 1000 generiert und dann die Richtung von a geändert wird. Es zeigt nicht mehr auf das ganzzahlige Objekt 1, sondern auf 1000 und schließlich auf 1 Wird verworfen
Änderbarer Typ: Variablenzuweisung a = [1,2,3,4,5,6], mit der eine Objektliste mit 6 Elementen in der Liste generiert werden soll. und die Variable a zeigt auf die Liste, a[2] = 5 ändert den Wert des dritten Elements der Liste a. Dies unterscheidet sich vom oben genannten. Es leitet a nicht auf den Punkt um, sondern ändert die Liste direkt. Elementwert in .
Dies wirkt sich auch auf die Übergabe von Parametern in der Funktion aus:
Unveränderlicher Typ: ähnlich der Wertübergabe in C , Wie Ganzzahlen, Zeichenfolgen und Tupel. fun(a) überträgt beispielsweise nur den Wert von a und hat keinen Einfluss auf das a-Objekt selbst. Wenn Sie beispielsweise den Wert eines Inside fun(a) ändern, ändert sich nur ein anderes kopiertes Objekt und hat keine Auswirkungen auf a selbst.
Änderbare Typen: C -ähnliche Referenzübergabe, wie z. B. Listen und Wörterbücher. Zum Beispiel wird Spaß (a) tatsächlich an ihn übergeben. Nach der Änderung wird auch ein äußerer Spaß betroffen sein.
Daher wird im ersten Beispiel b = 1 ein ganzzahliges Objekt 1 erstellt Variable b zeigt auf dieses Objekt, und wenn die Funktion chagne_number übergeben wird, wird die Variable b als Wert kopiert. Was übergeben wird, ist nur der Wert von b und hat keinen Einfluss auf b selbst. Für Einzelheiten können Sie sich das modifizierte Beispiel ansehen und anhand der gedruckten Ergebnisse ein besseres Verständnis erlangen.
# -*- coding: UTF-8 -*- def chagne_number( b ): print('函数中一开始 b 的值:{}' .format( b ) ) b = 1000 print('函数中 b 赋值后的值:{}' .format( b ) ) b = 1 chagne_number( b ) print( '最后输出 b 的值:{}' .format( b ) )
Gedrucktes Ergebnis:
函数中一开始 b 的值:1 函数中 b 赋值后的值:1000 最后输出 b 的值:1
Wenn der Parameter ein veränderbarer Typ ist, wird nach dem Aufruf dieser Funktion natürlich auch der ursprüngliche Wert geändert:
# -*- coding: UTF-8 -*- def chagne_list( b ): print('函数中一开始 b 的值:{}' .format( b ) ) b.append(1000) print('函数中 b 赋值后的值:{}' .format( b ) ) b = [1,2,3,4,5] chagne_list( b ) print( '最后输出 b 的值:{}' .format( b ) )
Ausgabeergebnis:
函数中一开始 b 的值:[1, 2, 3, 4, 5] 函数中 b 赋值后的值:[1, 2, 3, 4, 5, 1000] 最后输出 b 的值:[1, 2, 3, 4, 5, 1000]