Ich hatte ein vages Verständnis des variablen Umfangs von Funktionen in Python, daher werde ich es jedem mitteilen, der auf etwas Ähnliches gestoßen ist. Was ich sagen möchte, ist, dass für eine Variable, die als Argument der __-Funktion vorbereitet wurde, wenn eine ganze Zuordnung zu dieser Variablen vorgenommen wird, diese so behandelt wird, als ob eine neue lokale Variable definiert wird, und wenn eine Zuweisung zu einem Element der Variablen vorgenommen wird. Bitte beachten Sie, dass es einen Unterschied gibt, dass es als globale Variable behandelt wird, wie es __ ist.
Im folgenden Code bearbeiten wir die beiden Listen list_a und list_b innerhalb der Funktion, aber nur list_b wird als globale Variable behandelt und wirkt sich außerhalb der Funktion aus.
def func(list_a, list_b):
list_a = list_a + ['hoge']
list_b[1] = list_b[1] + 10
a = [1, 2, 3]
b = [5, 6, 7]
func(a, b)
print(f"a={a}, b={b}")
func(a, b)
print(f"a={a}, b={b}")
Die Ausgabe wird sein:
a=[1, 2, 3], b=[5, 16, 7]
a=[1, 2, 3], b=[5, 26, 7]
In Python werden Ausdrücke der Form "a = ..." in einer Funktion als neu definierte lokale Variable a behandelt, die nur in der Funktion __ einen Gültigkeitsbereich hat. Daher wird in list_a = list_a + ['hoge'] in der Funktion func list_a auf der linken Seite als neue Definition der lokalen Variablen list_a behandelt (list_a auf der rechten Seite wird als Argument der Funktion angegeben und befindet sich außerhalb der Funktion. Ist auch eine Variable mit Gültigkeitsbereich). Daher hat es keine Auswirkung auf eine Funktion außerhalb der Funktion.
Andererseits muss für list_b [1] = list_b [1] + 10 list_b [1] auf beiden Seiten als erstes Element der __ bereits definierten __variablen list_b behandelt werden. In diesem Beispiel ist list_b ein Argument der Funktion func, einer Variablen, die bereits außerhalb der Funktion definiert wurde. Daher spiegelt sich die Verarbeitung durch func in der Variablen b außerhalb der Funktion wider.
Gleiches gilt für Variablen anderer Typen wie ndarray und pandas.DataFrame.
Recommended Posts