2016-11-18 3 views
0

Also hier ist der Code, der x innerhalb einer Funktion verwendet.Verwenden von globalen Variablen innerhalb einer Python-Funktion

x = 1 
def f(): 
    y = x 
    x = 2 
    return x + y 
print x 
print f() 
print x 

aber Python ist nicht die Variable aus Funktionsumfang nachschauen gehen, und es ergibt sich UnboundLocalError: local variable 'x' referenced before assignment. Ich versuche nicht, den Wert der globalen Variable zu ändern, ich will es nur verwenden, wenn ich y=x mache.

Auf der anderen Seite, wenn ich es einfach verwenden, im Gegenzug statment, funktioniert es wie erwartet:

x = 1 
def f(): 
    return x 
print x 
print f() 

Kann jemand erklären, warum?

+0

Problem ist nicht mit y = x' aber 'y = x' mit' x = 2' zusammen. Entfernen Sie einen von ihnen und dieser Fehler verschwindet. (aber Sie können anders werden :)) – furas

+0

aber 'x = 2' ist unter' y = x', also ich meine python sollte zuerst mit 'y = x' umgehen, 1 zu y zuweisen und dann auf der Linie' x = 2 'erstellen Sie eine neue lokale Variable und weisen Sie ihr einen Wert 2 zu. ist es nicht? –

Antwort

2

Sie global x in Ihrer Funktion angeben müssen, wenn Sie Ihren Wert ändern möchten, aber es ist nicht zwingend nur den Wert zu lesen:

x = 1 
def f(): 
    global x 
    y = x 
    x = 2 
    return x + y 
print x 
print f() 
print x 

Ausgänge

1 
3 
2 
+0

Ich denke, ich ändere den Wert nicht. Frage aktualisiert –

+0

'y = x', ändert nicht' x', also warum ich brauche ein 'global' Schlüsselwort hier –

+0

@IjazKhan' y = x' ist nicht aber 'x = 2' ist. – JMat

Verwandte Themen