On 2006-07-14 16:07:28, Piet van Oostrum wrote: >>AP> 2a) In case you answer yes to question (1). Can you explain me how >>AP> I have to read the language reference in order to deduce this >>AP> is indeed the way things should be understood. > > Just read what it says. `It is only evaluated once' is quite clear I would > say. Your problem is that you thought __setitem__ is part of evaluation, > but it isn't. It is part of assignment, while __getitem__ is part of > evaluation. See the definitions of __getitem__ and __setitem__ in the > language reference manual.
Sorry to butt in here... I really don't know much more about this than I read in this thread :) But wasn't stated earlier that one of the differences between a += b and a = a + b is that a gets evaluated once in the first case and twice in the second case? If __getitem__ was part of the evaluation (as you seem to say), shouldn't it be called twice in the second case? It doesn't seem to get called twice; see this snippet from an earlier message: >>> t['a'] = t['a'] + 1 __getitem__, key = a __setitem__, key = a >>> t['a'] += 1 __getitem__, key = a __setitem__, key = a Seems like the __get/setitem__ thing has not much to do with what the manual calls evaluation, but rather with what the name implies: setting and getting the value of the item. And therefore, since in both the a += b case and the a = a + b case the value of a is gotten once and set once, __getitem__ gets called once and __setitem__ gets called once. No? Thanks, Gerhard -- http://mail.python.org/mailman/listinfo/python-list