On Fri, Mar 8, 2019 at 1:52 AM Jonathan Fine <jfine2...@gmail.com> wrote:

> I've just learnt something new. Look at
>
>     >>> from operator import iadd
>     >>> lst = [1, 2, 3]
>     >>> iadd(lst, 'hi')
>     [1, 2, 3, 'h', 'i']
>     >>> lst
>     [1, 2, 3, 'h', 'i']
>
> This shows that the proposals dict.flow_update and dict.__iadd__ are
> basically the same. (I think this is quite important for understanding
> the attraction of fluent programming. We ALREADY like and use it, in
> the form of augmented assignment of mutables.)
>

well, no -- the fact that __iadd__ acts like it does is essentially an
accident of implementation, and calling __iadd__ directly is frowned upon
(and I'm not totally sure if it is guaranteed to keep working that way by
the language spec). And, in fact, it DOESN'T act like flow_merge method --
as it both mutates the original object, and returns itself -- which I think
is a no-no in fluent programming, yes? (certainly in functional programming)

In [10]: list1 = [1,2,3]

In [11]: list2 = [4,5,6]

In [12]: list3 = list1.__iadd__(list2)

In [13]: list3
Out[13]: [1, 2, 3, 4, 5, 6]

In [14]: list1
Out[14]: [1, 2, 3, 4, 5, 6]

In [15]: list1 is list3
Out[15]: True


This also shows that
>    combined = defaults.copy()
>    combined.update(options)
> could, if the proposal is accepted, be written as
>    defaults.copy().__iadd__(options)
>

did you mean:

combined = defaults.copy().__iadd__(options)

because the way you wrote it, you are making a copy, mutating it, and then
throwing it away...

in which case, yes it could, but it would not be recommended, and I can't
see the advantage of it over:

combined = defaults + options

or even, if you REALLY want to use __ methods:

combined = defaults.__add__(options)


In [17]: list3 = list1.__add__(list2)

In [18]: list1
Out[18]: [1, 2, 3]

In [19]: list3
Out[19]: [1, 2, 3, 4, 5, 6]


> I got the idea from the withdrawn PEP (thank you, Nick Coghlan, for
> writing it):
> PEP 577 -- Augmented Assignment Expressions
> https://www.python.org/dev/peps/pep-0577/
>

Interestingly (to me) it was withdrawn for different reasons than what I
would think -- mutating and assigning at once is dangerous.

-CHB


-- 
Christopher Barker, PhD

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython
_______________________________________________
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