Values and objects
Ethan Furman
ethan at stoneleaf.us
Sat May 10 15:10:21 EDT 2014
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~
More information about the Python-list
mailing list