Interpreting Left to right?

Tycho Andersen tycho at tycho.ws
Fri Jun 24 17:08:35 EDT 2011


On Fri, Jun 24, 2011 at 01:24:24PM -0700, Ned Deily wrote:
> In article <20110624200618.GK6075 at point.cs.wisc.edu>,
>  Tycho Andersen <tycho at tycho.ws> wrote:
> > Yes, I understand that, but I guess I don't understand *why* things
> > are done that way. What is the evaluation order principle at work
> > here? I would have expected:
> > 
> > tmp = {}
> > x['huh'] = tmp # NameEror!
> > 
> > That is, the right hand sides of assignments are evaluated before the
> > left hand sides. That is (somehow?) not the case here.
> 
> http://docs.python.org/py3k/reference/simple_stmts.html#assignment-statements

Perhaps I'm thick, but (the first thing I did was read the docs and) I
still don't get it. From the docs:

"An assignment statement evaluates the expression list (remember that
this can be a single expression or a comma-separated list, the latter
yielding a tuple) and assigns the single resulting object to each of
the target lists, from left to right."

For a single target, it evaluates the RHS and assigns the result to
the LHS. Thus

x = x['foo'] = {}

first evaluates

x['foo'] = {}

which should raise a NameError, since x doesn't exist yet. Where am I
going wrong?

Thanks,

\t



More information about the Python-list mailing list