On 07/08/2013 02:26 AM, Tim Hanson wrote:
In the first Lutz book, I am learning about nested functions.
Here's the book's example demonstrating global scope:
def f1():
x=88
def f2():
print(x)
f2()
f1()
88
But that's not global scope, it's non-local scope. Global would be if
you were referencing a symbol defined at top-level.
No problem so far. I made a change and ran it again:
def f1():
x=88
def f2():
print(x)
x=99
print(x)
f2()
f1()
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
f1()
File "<pyshell#10>", line 7, in f1
f2()
File "<pyshell#10>", line 4, in f2
print(x)
UnboundLocalError: local variable 'x' referenced before assignment
This doesn't work. To my mind,in f2() I first print(x) then assign a variable
with the same name in the local scope, then print the changed x. Why doesn't
this work?
As Hugo says, a function is compiled into a single entity, and within
that entity, a given name is either local or not. It's decided by the
presence (anywhere in the function) of an assignment, or a with
statement, or maybe other name-binding statements.
--
DaveA
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor