On Sun, 30 Jun 2013 01:56:25 -0700, rusi wrote: [...] > All of which adds up to making scoping/variables an arcane craft. > > Now having such passes is one thing. Defining the language in terms of > them quite another...
I don't believe that Python's behaviour is defined in terms of the number of passes. It is defined in terms of a condition "if you assign to a name, it is local unless declared global". Parsing the function twice just happens to be the simplest way for the compiler to implement that rule, but it's not strictly necessary. A skilled human reader, for example, may read the function once, and re-interprete what's already seen on the basis of what they've just seen. For a human reader, such backtracking is probably easier than a two-pass process explicitly memorizing which variables are local and which are global. -- Steven -- http://mail.python.org/mailman/listinfo/python-list