Python dot-equals (syntax proposal)
Stefan Behnel
stefan_ml at behnel.de
Sat May 1 09:17:25 EDT 2010
Tim Chase, 01.05.2010 14:13:
> On 05/01/2010 12:08 AM, Patrick Maupin wrote:
>> +=, -=, /=, *=, etc. conceptually (and, if lhs object supports in-
>> place operator methods, actually) *modify* the lhs object.
>>
>> Your proposed .= syntax conceptually *replaces* the lhs object
>> (actually, rebinds the lhs symbol to the new object).
>
> The += family of operators really do rebind the symbol, not modify the
> object.
>
> >>> from decimal import Decimal
> >>> d = Decimal(42)
> >>> e = Decimal(18)
> >>> orig = d
> >>> d += e
> >>> d
> Decimal("60")
> >>> e
> Decimal("18")
> >>> orig
> Decimal("42")
> >>> d is orig
> False
>
> If your suggestion that += *modifies* the object, then orig would now
> unintuitively contain 60 and "d is orig" would return True.
>
> This doesn't preclude you from implementing a self-mutating += style
> __add__ method and returning "self", but it's usually a bad idea unless
> it's dire for performance (and even then, think it over a couple times).
It's not like this was unprecedented in Python, though:
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> l = [1,2,3]
>>> a = l
>>> l += [4,5,6]
>>> l
[1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3, 4, 5, 6]
And I'm pretty sure this wasn't just done for performance reasons. Mutable
data types behave that way.
Stefan
More information about the Python-list
mailing list