incrementation operators?

Colin J. Williams cjw at connection.com
Sun Aug 13 20:42:08 EDT 2000


Thomas,

Many thanks for the responses of Alex and yourself.

I think you make a case for the list augmentation, but I still wonder about the
frequency with which the simple arithmetic incrementing operators are used in
other languages.  However, Guido has spoken and so I will not pursue that.

Regarding the use of the += with lists.  It seems that:

a= [1, 2]
a+= 3                  is equivalent to a.append(3)
a+= [4]                is equivalent to a.extend([4])

Suppose one wishes to do a.append([5]).  It would appear that one would have to
return to the existing syntax.

Thanks again

Colin W.

Thomas Wouters wrote:
> 
> On Sun, Aug 13, 2000 at 10:31:43AM -0400, Colin J. Williams wrote:
> 
> > The PEP gives a full description of the various operators, but provides no
> > rationale for their introduction.
> 
> A previous version of the PEP did include that. In fact, it was an
> incomplete story and *only* included the rationale ;) But Guido asked for a
> more technical PEP, because there is no doubt in his mind that augmented
> assignment are a good thing and should be included in Python.
> 
> You can browse the CVS tree, including old revisions on SF. The revision I'm
> talking about can be found here:
> 
> http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/python/nondist/peps/pep-0203.txt?rev=1.3&content-type=text/x-cvsweb-markup&cvsroot=python
> 
> Mind the linebreaks ;)
> 
> > I wonder how frequently this sort of operation in place would be used in
> > practice. Does the frequency of likely use balance the increased clutter?
> 
> Well, how often have you yourself used 'list.extend' or 'list.append' ?
> I personally think
> 
>   list += [element]
> 
> and
> 
>   list += olist
> 
> look better (== more like what they actually do) than
> 
>   list.append(element)
> 
> and
> 
>   list.extend(olist)
> 
> Especially since even though the methods are functioncalls, they don't
> return any useful value.
> 
> > One of the attractive features of Python is its relative simplicity.
> > Would we lose some of this simplicity for little practical gain?
> 
> We lose some simplicity, yes, but not much, and I think the price is worth
> it, myself. The augmented assignment operators, all eleven of them, are
> obvious combinations of assignment and a binary operation. There is no large
> or unnatural step to be made from the current Python to
> Python-with-augmented-assignment.
> 
> > These operators exist in other languages.  Is there a justification for
> > including them in Python?
> 
> Yes, Even asside from people expecting them :-) In fact, people expecting
> them is not a reason to include them at all -- auto-increment/decrement
> operators are *not* added, eventhough people expect them. The two main
> reasons (as far as I'm concerned, other opinions might differ) for augmented
> assignment are simplicity and in-place editing of objects. Simplicity in
> that you can write
> 
>  something[orother(to, something[else])] += newval
> 
> rather than the longer, less obvious (because you have to look closely to
> see if the two indices are actually the same) and more errorprone:
> 
>  something[orother(to, something[else])] = something[orother(to,
>                                                 something[else])] + newval
> 
> And because the augmented versions of the binary operators can be seperately
> overloaded, in both Python and C, large objects and other objects that wish
> to do so can make themselves easily 'mutable', without having to resort to
> methods (see the list argument above.) Note that objects don't *have* to
> overload the augmented operations! If they don't, code falls back to the
> normal binary operation.
> 
> > I hope that I am not too late for some sober second thoughts.
> 
> Well, it seems Guido and Tim have been wanting augmented assignment for
> years, and only waited for someone to write the patch. Second thoughts about
> the implementation are possible. Second thoughts about specific semantics
> might be possible, though I've given these very good and long thought and I
> think I've covered all options. But unless someone brings up real
> fundamental issues wrt augmented assignment, I don't think you can stop it
> from going into 2.0. It's up to Guido, and he's all for it.
> 
> --
> Thomas Wouters <thomas at xs4all.net>
> 
> Hi! I'm a .signature virus! copy me into your .signature file to help me spread!






More information about the Python-list mailing list