[Python-Anfänger] Variablen und Umfang innerhalb der Funktion (wenn die Verarbeitung innerhalb der Funktion außerhalb der Funktion reflektiert wird und wenn sie nicht reflektiert wird)

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

[Python-Anfänger] Variablen und Umfang innerhalb der Funktion (wenn die Verarbeitung innerhalb der Funktion außerhalb der Funktion reflektiert wird und wenn sie nicht reflektiert wird)
Test.py wird auf dem Webserver in Python3 nicht angezeigt.
NameError: Der globale Name'dot_parser 'ist nicht definiert und was ist zu tun, wenn er in Python angezeigt wird?
Erstellen einer Python-Umgebung unter Ubuntu (wenn pip nicht die Standardeinstellung war)
[Python] Süß Ist es süß? Über Suiten und Ausdrücke in offiziellen Dokumenten
Verarbeitung, wenn die Schlüsseleingabe von Python-Pygame nicht gut funktioniert.
Python Hinweis: Wenn easy_install nicht verwendet werden kann
[Python] Verwenden Sie und und oder beim Erstellen von Variablen
Verwenden Sie Ruby und Python, um die Wahrscheinlichkeit zu ermitteln, dass eine Karte mit einer natürlichen Zahl von 1 bis 100 ein Vielfaches von 3 und kein Vielfaches von 5 ist.
Es scheint, dass die Version von Pyflakes nicht die neueste ist, wenn flake8 installiert ist
[Python] Vorsichtsmaßnahmen beim Erfassen von Daten durch Scraping und Einfügen in die Liste
Machen Sie aus einem Python-Programm einen Daemon und führen Sie es automatisch aus, wenn das Betriebssystem gestartet wird
[EC2] Was tun, wenn Selen festsitzt und die Verarbeitung nicht fortgesetzt wird?
Verwenden Sie Python auf Raspberry Pi 3, um die LED zu beleuchten, wenn es dunkel wird!
Python Pandas ist nicht für die Stapelverarbeitung geeignet
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Über den Unterschied zwischen "==" und "is" in Python
[Python Data Frame] Wenn der Wert leer ist, füllen Sie ihn mit dem Wert einer anderen Spalte.
Ich möchte die Variablen in der Python-Vorlagendatei ersetzen und in einer anderen Datei in Massenproduktion herstellen
Es gibt ein Muster, das das Programm bei Verwendung von Python-Threading nicht gestoppt hat
[Python] Vorsichtsmaßnahmen, wenn es nicht funktioniert, auch wenn TimedRotatingFileHandler in basicConfig in Python2 festgelegt ist
Der Zeitpunkt, zu dem der Wert des Standardarguments ausgewertet wird, unterscheidet sich zwischen Ruby und Python.
Es ist einfach, SQL mit Python auszuführen und das Ergebnis in Excel auszugeben