Relax Syntax for Augmented Arithmetic?
Aahz
aahz at pythoncraft.com
Thu Jan 22 22:22:08 EST 2009
In article <87hc3un1vn.fsf.mdw at metalzone.distorted.org.uk>,
Mark Wooding <mdw at distorted.org.uk> wrote:
>
> * Python augmented-assignment (`+=', for example) is inconsistent.
> Depending on what type of object the left-hand side evaluates to, it
> may /either/ mutate that object, /or/ assign a new value to the
> expression.
Actually, that is not correct. The augmented assignment always binds a
new value to the name; the gotcha is that with a mutable object, the
object returns ``self`` from the augmented assignment method rather than
creating a new object and returning that. IOW, the smarts are always
with the object, not with the augmented assignment bytecode.
The best way to illustrate this:
>>> a = (1, ['foo'], 'xyzzy')
>>> a[1].append('bar')
>>> a
(1, ['foo', 'bar'], 'xyzzy')
>>> a[1] = 9
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: object doesn't support item assignment
>>> a
(1, ['foo', 'bar'], 'xyzzy')
>>> a[1] += ['spam']
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: object doesn't support item assignment
>>> a
(1, ['foo', 'bar', 'spam'], 'xyzzy')
--
Aahz (aahz at pythoncraft.com) <*> http://www.pythoncraft.com/
Weinberg's Second Law: If builders built buildings the way programmers wrote
programs, then the first woodpecker that came along would destroy civilization.
More information about the Python-list
mailing list