Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich versuche, dies herauszufinden:

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

Danke!

War es hilfreich?

Lösung

Innerhalb einer Funktion Variablen, die zugeordnet sind, werden als lokale Variablen standardmäßig behandelt. So weisen auf globale Variablen, verwenden Sie die global Aussage:

def g(n):
    global c
    c = c + n

Dies ist eine der skurrilen Bereiche Python, die mit mir nie wirklich saß gut hat.

Andere Tipps

Globaler Zustand ist, etwas zu vermeiden, vor allem, um es zu mutieren. Überlegen Sie, ob g() einfach zwei Parameter übernehmen soll, oder ob f() und g() müssen Methoden einer gemeinsamen Klasse mit c einer Instanz Attribut sein

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

Errata für Gregs Post :

Es sollte keine sein, bevor sie referenziert werden . Schau mal:

x = 1
def explode():
    print x # raises UnboundLocalError here
    x = 2

Es explodiert, auch wenn x zugewiesen wird, nachdem sie verwiesen wird. In Python Variable kann lokal oder äußeren Umfang beziehen, und es kann nicht in einer Funktion ändern.

Andere als das, was Greg sagte, in Python 3.0, gibt es die nicht-lokale Aussage zu behaupten, „hier sind einige Namen, die in dem umgebenden Bereich definiert werden“. Im Gegensatz zu globalen haben diese Namen bereits außerhalb des aktuellen Bereichs definiert werden. Es wird leicht sein, Namen und Variablen aufzuspüren. Heutzutage kann man nicht sicher sein, wo „Globals etwas“ genau definiert ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top