En Fri, 06 Nov 2009 04:29:05 -0300, Alf P. Steinbach <al...@start.no> escribió:
* Gabriel Genellina:
En Thu, 05 Nov 2009 21:23:27 -0300, Alf P. Steinbach <al...@start.no> escribió:

foo()[bar()] += 1

One reason was as mentioned that the C++ standard has essentially the /same wording/ about "only evaluated once" but with a more strict meaning; in C++, with the built-in += operator

    a()[foo()] += 1;

not only avoids calling a() and foo() twice, it also avoids doing the internal indexing twice, while in python the internal indexing, locating that item, is performed first in __getitem__ and then in __setitem__ (unless that is optimized away at lower level by caching last access, but that in itself has overhead).

Yes, that's a common misunderstanding in people coming from other languages with a different semantics for "assignment" and "variable". You're not alone :)

Python does not have "lvalues" as in C++. In the statement x=1, the left hand side does not denote an object, but a name. x.attr=1 and x[index]=1 act more like a function call (they *are* function calls actually) than assignments.

Another reason was that §6.2 does explicitly discuss attribute references as targets, but not subscription as target. It would have been more clear to me if all (four?) possible target forms were discussed. Happily you did now discuss that in the part that I snipped above, but would've been nice, and easier for for an other-language-thinking person :-), if it was in documentation.

Yes, probably that section should be improved (except the final example added, the text hasn't changed since it was first written, more than 9 years ago).

Reading reference material may be terribly boring, I admit. Most people read only the specific sections required to solve a specific problem; and some concepts that are introduced earlier in the book are missed or skipped. If you haven't already done so, try at least to read these two sections from the Language Reference: 3.1. Objects, values and types, and 4.1. Naming and binding. They define the most important concepts in Python; the rest are just details.

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to