Der Trick, dies zu verstehen, besteht darin, dass Sie beim Zuweisen zu einer Variablen mit = ebenfalls eine lokale Variable deklarieren. Anstatt also den Wert der globalen Variablen a zu ändern, setzt setA (value) tatsächlich eine lokale Variable (die zufällig als a bezeichnet wird) auf den übergebenen Wert.
Dies wird deutlicher, wenn Sie versuchen, den Wert zu drucken von einem zu Beginn des setA (Wertes) wie folgt:
def setA(value):
print "Before assignment, a is %d" % (a)
a = value
print "Inside setA, a is now %d" % (a)
Wenn Sie versuchen, diesen Python ausführen werden Sie einen hilfreichen Fehler:
Traceback (most recent call last):
File "scopeTest.py", line 14, in
setA(42)
File "scopeTest.py", line 7, in setA
print "Before assignment, a is %d" % (a)
UnboundLocalError: local variable 'a' referenced before assignment
Dies sagt uns, dass Python hat, dass die entschieden Die Funktion setA (value) hat eine lokale Variable namens a, die Sie ändern, wenn Sie ass Ign in der Funktion. Wenn Sie in der Funktion nicht a zuweisen (wie bei printA()), verwendet Python die globale Variable A.
Um eine Variable als global zu markieren, müssen Sie das globale Schlüsselwort in Python, im Bereich verwenden dass Sie die globale Variable verwenden möchten. In diesem Fall ist das innerhalb der setA (value) -Funktion. Also das Skript wird:
a = 7
def printA():
print "Value of a is %d" % (a)
def setA(value):
global a
a = value
print "Inside setA, a is now %d" %(a)
print "Before setA"
printA()
setA(42)
print "After setA"
printA()
Diese eine Zeile hinaus sagt Python, dass, wenn Sie die Variable a in der setA (Wert) Funktion, die Sie über die globale Variable sprechen, nicht eine lokale Variable.
* (rohes Wort) * Python definieren, – theonlygusti