On Mon, Mar 4, 2019 at 3:31 PM Del Gan <delgan...@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)
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to