[PYTHON] Variabler Umfang bei Verwendung interner Funktionen

Verschachtelungsfunktionen, die verwendet werden, wenn Sie sie mehrmals verwenden, aber nicht als Methode zum Ausgehen verwenden müssen.

def hoge():
    def fuga():
        pass

Ich habe mich gefragt, wie mit Variablen umgegangen werden soll, also habe ich es überprüft.

Lokale Variablen

def hoge():
    x = 1
    def fuga():
        x = 3
    fuga()
    print(x)

Ausführungsergebnis

hoge()
1

Lokale Variablen scheinen als separate Variablen behandelt zu werden. Natürlich natürlich. Dies kann jedoch mit der "nichtlokalen" Erklärung geändert werden.

def hoge():
    x = 1
    def fuga():
        nonlocal x
        x = 3
    fuga()
    print(x)

Ausführungsergebnis

hoge()
3

Klassenvariable

class Sample:
    def __init__(self):
        self.hoge = None

def hoge():
    smp = Sample()
    smp.hoge = "abcde"
    def fuga():
        smp.hoge = "fghijk"
    fuga()
    print(amp.__dict__)

Ausführungsergebnis

hoge()
{'hoge': 'fghijk'}

Ich frage mich, ob Klassenvariablen global behandelt werden.

Bonus

Sie können dies verwenden, um Ihren Code zu aktualisieren, wenn Sie abhängig von der Bedingung einen anderen Wert in eine Klassenvariable einfügen möchten

class Sample():
    def __init__(self):
        self.hoge = None
        self.fuga = None

def hoge(list):
    smp = Sample()
    def set_val(val1, val2):
        smp.hoge = val1
        smp.fuga = val2
    if len(list) == 1:
        set_val(list[0], None)
    else:
        set_val(list[0], list[1])
    print(smp.__dict__)

Ausführungsergebnis

hoge(['aaaa', 'bbbb'])
{'hoge': 'aaaa', 'fuga': 'bbbb'}

hoge(['cccc'])
{'hoge': 'cccc', 'fuga': None}

Ich weiß nicht, ob es irgendeinen Sinn dafür gibt!

Recommended Posts

Variabler Umfang bei Verwendung interner Funktionen
Variabler Umfang
Über den Umfang der Variablen. .. ..
Zusammenfassung bei Verwendung von Fabric
[Azure] Versuchen Sie, Azure-Funktionen zu verwenden
Vorsichtsmaßnahmen bei der Verwendung von Chainer
Notizen mit Dreiecksfunktionen
(Persönliche) Punkte bei Verwendung von ctypes
Umgebungsvariablen bei Verwendung von Tkinter
DEBUG-Einstellungen bei Verwendung von Django
Bei Verwendung von if und bei Verwendung von while
Dateistruktur bei Verwendung von Serverless-Python-Anforderungen
Verwenden Sie configparser, wenn Sie die API verwenden