Wie findet der Zugriff auf Referenzen statt?
Verfasst: Montag 9. Juli 2012, 10:40
Hallo zusammen,
ich habe ein Verhalten in Python welches ich nicht verstehe.
Der Code liefert hierbei folgende ausgabe:
Ich dachte nun eigentlich, dass der Identifier immer zuerst in den locals gesucht wird und wenn er hier nicht gefunden wird in den globals. Nun hat aber die, nicht durchlaufene, Zuweisung in func6 anscheinend zur Konsequenz, das der Zugriff auf THISISAGLOBAL hier nicht mehr bei den globals versucht wird. Warum?
Vielen herzlichen dank im voraus
template
ich habe ein Verhalten in Python welches ich nicht verstehe.
Code: Alles auswählen
#!/usr/bin/env python
THISISAGLOBAL = 25
def func1():
print THISISAGLOBAL
def func2():
THISISAGLOBAL = 30
print THISISAGLOBAL
def func3():
global THISISAGLOBAL
THISISAGLOBAL = 30
print THISISAGLOBAL
def func4():
global THISISAGLOBAL
if 1 == 0:
THISISAGLOBAL = ISNOTEXECUTED
print THISISAGLOBAL
def func5():
if 1 == 0:
locals()['THISISAGLOBAL'] = ISNOTEXECUTED
print THISISAGLOBAL
def func6():
if 1 == 0:
THISISAGLOBAL = 1
print THISISAGLOBAL
func1()
func2()
func1()
func3()
func1()
func4()
func5()
func6()
Code: Alles auswählen
25
30
25
30
30
30
30
Traceback (most recent call last):
File "./globaltest.py", line 41, in ?
func6()
File "./globaltest.py", line 31, in func6
print THISISAGLOBAL
UnboundLocalError: local variable 'THISISAGLOBAL' referenced before assignment
Vielen herzlichen dank im voraus
template