Op 2005-11-04, Christopher Subich schreef <[EMAIL PROTECTED]>: > 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.
Well but once can consider b.a as an expression too. An expression that gets evaluated twice in case of b.a += 2 > 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__. But we are here questioning language design. One could question a design where it is necessary to invoke the [] operator twice, even when it is only mentioned once in the code. > 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 than one time is odd, > at best. No more or less than "[]" or "." is to be invoked twice. -- Antoon Pardon -- http://mail.python.org/mailman/listinfo/python-list