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