spir wrote:
Hello Eike!

Eike Welk <eike.w...@gmx.net> dixit:

<snip>
Well, this is certainly not specific to closures.

i = 0
def f():
  i = i+1
  print i
f()
==> UnboundLocalError

Imo, in this case, "i = i+1" is a kind of "paradoxal injonction" (lol! not sure 
of the exact idiom in english). You tell python both to create a local i (thus ignore any other 
scope to lookup for variables called 'i') and to use global i to define the local one.
If I were the victim of such a "paradoxal injonction" I would reply with a 
naughty word!

I believe the easiest model to understand the behavior is:

The compiler scans the entire function to find which variables are assigned (via =, as, or other syntax) anywhere in the function. Then for those variables, all references are done without any dictionary accesses. Thus an assignment anywhere (not just on the same line) cause all references to be to the (unbound) local.

DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to