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