On 05/10/2014 02:32 AM, Chris Angelico wrote:

Tell me, what may this function do in a compliant Python?

def demo():
     ret = spam
     spam = 23
     return ret

In CPython, that'll raise UnboundLocalError, because the local
variable 'spam' does already exist, and currently has no value (no
object bound to it).

No, it does not exist -- or, more accurately, it does not exist *yet* but will. The fact that there is a slot waiting for what will be spam is a cpython implementation detail.

And if you don't like that argument (although it is a perfectly sound and 
correct argument), think of the module name space:

ret = spam
spam = 23

will net you a simple NameError, because spam has not yet been created.


 If a compliant Python implementation is allowed
to have this return the value of a global or builtin spam, then I
would agree that you can create variables at run time.

See module example above.  This behavior is not allowed in functions for scope 
and sanity (mostly sanity) reasons.

--
~Ethan~
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to