Ich versuche, dies herauszufinden:Python Umfang
c = 1
def f(n):
print c + n
def g(n):
c = c + n
f(1) => 2
g(1) => UnboundLocalError: local variable 'c' referenced before assignment
Dank!
Ich versuche, dies herauszufinden:Python Umfang
c = 1
def f(n):
print c + n
def g(n):
c = c + n
f(1) => 2
g(1) => UnboundLocalError: local variable 'c' referenced before assignment
Dank!
Innerhalb einer Funktion werden Variablen, die zugewiesen werden, standardmäßig als lokale Variablen behandelt. So weisen auf globale Variablen, verwenden Sie die global
Anweisung:
def g(n):
global c
c = c + n
Dies ist eine der skurrilen Bereiche Python, die nie wirklich hat saß gut mit mir.
Der globale Status ist etwas zu vermeiden, insbesondere mutieren. Überlegen Sie, ob g()
einfach zwei Parameter übernehmen soll, oder ob f()
und g()
müssen Methoden einer gemeinsamen Klasse sein, mit c
eine Instanz Attribut
class A:
c = 1
def f(self, n):
print self.c + n
def g(self, n):
self.c += n
a = A()
a.f(1)
a.g(1)
a.f(1)
Ausgänge:
2
3
Andere als das, was Greg sagte, in Python 3.0, gibt es die nicht-lokale Anweisung zu sagen "Hier sind einige Namen, die im umschließenden Geltungsbereich definiert sind". Anders als global müssen diese Namen bereits außerhalb des aktuellen Gültigkeitsbereichs definiert sein. Es wird leicht sein, Namen und Variablen zu finden. Heutzutage kann man nicht sicher sein, wo "Globals etwas" genau definiert ist.
Errata für Greg's post:
sollte es keine sein, bevor sie referenziert werden. Werfen Sie einen Blick auf:
x = 1
def explode():
print x # raises UnboundLocalError here
x = 2
Es explodiert, auch wenn x zugeordnet ist, nachdem es referenziert ist. In Python kann die Variable lokal oder auf den äußeren Bereich verweisen, und sie kann nicht in einer Funktion geändert werden.
Dies ist ähnlich zu PHP, es erfordert auch die Verwendung von 'global'. –