
On Mon, Mar 4, 2019 at 3:31 PM Del Gan <delgan.py@gmail.com> wrote:
the augmented assignment version allows anything the ``update`` method allows, such as iterables of key/value pairs
I am a little surprised by this choice.
First, this means that "a += b" would not be equivalent to "a = a + b". Is there other built-in types which act differently if called with the operator or augmented assignment version?
Yes. The same happens for lists. [1] + 'a' is a TypeError, but a += 'a' works:
a = [1] a + 'a' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "str") to list a += 'a' a [1, 'a']
Secondly, that would imply I would no longer be able to infer the type of "a" while reading "a += [('foo', 'bar')]". Is it a list? A dict?
Real code more likely looks like "a += b" and there you already don't have much of a clue -- the author of the code should probably communicate this using naming conventions or type annotations.
Those two points make me uncomfortable with "+=" strictly behaving like ".update()".
And yet that's how it works for lists. (Note that dict.update() still has capabilities beyond +=, since you can also invoke it with keyword args.) -- --Guido van Rossum (python.org/~guido)