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