> > In particularly mutating and > > non-mutating operations are separated. The assignment expression breaks > > this. > > [citation needed] > > In terms of blending mutating and non-mutating operations, augmented > assignment is far worse. Contrast: > > >>> x = 1 > >>> y = x > >>> x += 1 > > >>> a = [1] > >>> b = a > >>> a += [2] > > > Assignment expressions do the exact same thing as assignment > statements, but also allow you to keep using that value. There is > nothing about mutation. (Unless you believe that assignment *itself* > is mutation, in which case Python is definitely the wrong language for > you.) > > I think Serhiy use "mutation" as "assignment", or "changing variable". And at this point, I'm with Serhiy.
Before PEP 572, assignment is happened on very limited places. When we want to use "variable x", we can check "x isn't changed from value I want" very quickly, without reading full code. For example, with open(some_file) as f: for line in f: line = line.rstrip() # some code here self.some_method(..., # some long arguments (line := line.split())[0], line[1], # oops! ...) # some code here x = {k: f for k in line if (f := k.upper()).startswith('F')} # oops! # some code here Before PEP 572, we can check "f is not changed from `as f`" and "line is not changed from `line = line.rstrip()`" very quickly, without reading expressions in argument list or comprehension. After PEP 572, we need to read all code between place we want to use some variable and these variables are assigned to expected value. In this meaning, augmented assignment is far better than assignment expression. It's very easy to find, same to "as x" or "x =". So PEP 572 will reduce maintainability of code written by others (1) (1) "others" including "I" in several months ago. Linters helps us sometime, but linter can't help us when others who written the code didn't use linter and it's difficult to solve every warning from linters. This is what I feel how PEP 572 is different from f-string or ternary expression. f-string and ternary expression can do only what expressions can. But PEP 572 expands "what expressions can". I feel PEP 572 breaks border between expression and statement, and it makes readability of dirty code worse. On the other hand, I understand PEP 572 allows clever code simplifies tedious code. It may increase readability of non-dirty code. Regards, -- INADA Naoki <songofaca...@gmail.com>
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com