Class Variable Access and Assignment
Christopher Subich
csubich.spam.block at spam.subich.block.com
Fri Nov 4 12:15:46 EST 2005
Antoon Pardon wrote:
> Well maybe because as far as I understand the same kind of logic
> can be applied to something like
>
> lst[f()] += foo
>
> In order to decide that this should be equivallent to
>
> lst[f()] = lst[f()] + foo.
>
> But that isn't the case.
Because, surprisingly enough, Python tends to evaluate expressions only
once each time they're invoked.
In this case, [] is being used to get an item and set an item --
therefore, it /has/ to be invoked twice -- once for __getitem__, and
once for __setitem__.
Likewises, lst appears once, and it is used once -- the name gets looked
up once (which leads to a += 1 problems if a is in an outer scope).
f() also appears once -- so to evaluate it more trhan one time is odd,
at best.
If you know very much about modern lisps, it's similar to the difference
between a defun and a defmacro.
More information about the Python-list
mailing list