Confused by Python and nested scoping (2.4.3)
Schüle Daniel
uval at rz.uni-karlsruhe.de
Thu Apr 20 00:12:20 EDT 2006
Sean Givan schrieb:
> Hi. I'm new to Python
welcome
> ago. I was doing some experiments with nested functions, and ran into
> something strange.
>
> This code:
>
> def outer():
> val = 10
> def inner():
> print val
> inner()
>
> outer()
>
> ...prints out the value '10', which is what I was expecting.
>
> But this code..
>
> def outer():
> val = 10
> def inner():
> print val
> val = 20
> inner()
> print val
>
> outer()
>
> ...I expected to print '10', then '20', but instead got an error:
>
> print val
> UnboundLocalError: local variable 'val' referenced before assignment.
>
> I'm thinking this is some bug where the interpreter is getting ahead of
> itself, spotting the 'val = 20' line and warning me about something that
just a little carefull thought
if something that basic should really be a bug
how many thousand people would discover it daily?
> doesn't need warning. Or am I doing something wrong?
yes, you can't modify it
you can do it for global namespace or local
but not inbetween
val = 0
def outer():
val = 10
def inner():
global val
val = 30
inner()
print val
outer()
10 # outer val is not changed
print val # global is modified
30
hth, Daniel
More information about the Python-list
mailing list