483 Stimmen

Nichtlokale Python-Anweisung

Was bedeutet die Python nonlocal Anweisung tun (in Python 3.0 und höher)?

Es gibt keine Dokumentation auf der offiziellen Python-Website und help("nonlocal") funktioniert ebenfalls nicht.

13voto

Jeyekomon Punkte 2288

Zitat aus dem Python 3 Referenz :

Die nonlocal-Anweisung bewirkt, dass die aufgelisteten Bezeichner auf zuvor gebundene Variablen im nächstgelegenen umschließenden Bereich mit Ausnahme von globals verweisen.

Wie in der Referenz erwähnt, wird bei mehreren verschachtelten Funktionen nur die Variable in der nächstgelegenen umschließenden Funktion geändert:

def outer():
    def inner():
        def innermost():
            nonlocal x
            x = 3

        x = 2
        innermost()
        if x == 3: print('Inner x has been modified')

    x = 1
    inner()
    if x == 3: print('Outer x has been modified')

x = 0
outer()
if x == 3: print('Global x has been modified')

# Inner x has been modified

Die "nächstgelegene" Variable kann mehrere Ebenen entfernt sein:

def outer():
    def inner():
        def innermost():
            nonlocal x
            x = 3

        innermost()

    x = 1
    inner()
    if x == 3: print('Outer x has been modified')

x = 0
outer()
if x == 3: print('Global x has been modified')

# Outer x has been modified

Es kann sich aber nicht um eine globale Variable handeln:

def outer():
    def inner():
        def innermost():
            nonlocal x
            x = 3

        innermost()

    inner()

x = 0
outer()
if x == 3: print('Global x has been modified')

# SyntaxError: no binding for nonlocal 'x' found

3voto

gxyd Punkte 617
a = 0    #1. global variable with respect to every function in program

def f():
    a = 0          #2. nonlocal with respect to function g
    def g():
        nonlocal a
        a=a+1
        print("The value of 'a' using nonlocal is ", a)
    def h():
        global a               #3. using global variable
        a=a+5
        print("The value of a using global is ", a)
    def i():
        a = 0              #4. variable separated from all others
        print("The value of 'a' inside a function is ", a)

    g()
    h()
    i()
print("The value of 'a' global before any function", a)
f()
print("The value of 'a' global after using function f ", a)

2voto

Yossi Truzman Punkte 179

Mein persönliches Verständnis der "nonlocal"-Anweisung (und entschuldigen Sie mich, da ich neu in Python und Programmierung im Allgemeinen bin) ist, dass die "nonlocal" ist ein Weg, um die Global-Funktionalität innerhalb von iterierten Funktionen und nicht den Körper des Codes selbst zu verwenden. Eine Global-Anweisung zwischen Funktionen, wenn Sie so wollen.

0voto

NIPHIN Punkte 1061

Mit 'nichtlokalen' inneren Funktionen (d.h. verschachtelten inneren Funktionen) gelesen werden können & ' schreiben. ' Erlaubnis für diese spezifische Variable der äußeren übergeordneten Funktion . Und nonlocal kann nur innerhalb innerer Funktionen verwendet werden z.B.:

a = 10
def Outer(msg):
    a = 20
    b = 30
    def Inner():
        c = 50
        d = 60
        print("MU LCL =",locals())
        nonlocal a
        a = 100
        ans = a+c
        print("Hello from Inner",ans)       
        print("value of a Inner : ",a)
    Inner()
    print("value of a Outer : ",a)

res = Outer("Hello World")
print(res)
print("value of a Global : ",a)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X