Geschachtelte Funktionen: "globale" Variablen

01/03/2010 - 11:02 von Ole Streicher | Report spam
Hallo Gruppe,

ich habe ein neues Problem :-)

Folgender Quelltext:
8<--
def myfunc(values):
c = 0
d = 0
def cha(x):
if c != x:
print 'c = %i' % c
if d != x:
print 'd = %i' % d
d = x

for v in values:
cha(v)

myfunc([1,1,2,3,1,5,1,5,5])
8<--
liefert bei mir
8<--
c = 0
Traceback (most recent call last):
File "m.py", line 15, in <module>
myfunc([1,1,2,3,1,5,1,5,5])
File "m.py", line 13, in myfunc
cha(v)
File "m.py", line 8, in cha
if d != x:
UnboundLocalError: local variable 'd' referenced before assignment
8<--

Warum kann die Funktion "cha() den Wert x mit c vergleichen, mit d
jedoch nicht? Und wie kann ich erreichen, dass cha(x) den Wert d setzt?

Viele Grüße

Ole
 

Lesen sie die antworten

#1 Peter Otten
01/03/2010 - 14:46 | Warnen spam
Ole Streicher wrote:

Hallo Gruppe,

ich habe ein neues Problem :-)

Folgender Quelltext:
8<--
def myfunc(values):
c = 0
d = 0
def cha(x):
if c != x:
print 'c = %i' % c
if d != x:
print 'd = %i' % d
d = x

for v in values:
cha(v)

myfunc([1,1,2,3,1,5,1,5,5])
8<--
liefert bei mir
8<--
c = 0
Traceback (most recent call last):
File "m.py", line 15, in <module>
myfunc([1,1,2,3,1,5,1,5,5])
File "m.py", line 13, in myfunc
cha(v)
File "m.py", line 8, in cha
if d != x:
UnboundLocalError: local variable 'd' referenced before assignment
8<--

Warum kann die Funktion "cha() den Wert x mit c vergleichen, mit d
jedoch nicht?



Python behandelt alle Namen, denen ein Wert zugewiesen wird als lokal,
sofern sie nicht explizit als global deklariert sind.

Und wie kann ich erreichen, dass cha(x) den Wert d setzt?



In Python 2.x bislang gar nicht. Python 3 hat dafür das nonlocal-Statement:

http://docs.python.org/3.1/referenc...l#nonlocal

Peter

Ähnliche fragen