On Tue, Apr 24, 2018 at 10:56 AM, Chris Angelico <ros...@gmail.com> wrote: [..] >> A lot of other questions arise though. PEP 572 proposes: >> >> a = 1 # assignment >> a := 1 # also assignment >> (a := 1) # also assignment >> (a = 1) # error, why? > > Your third example is just the same as the second, with parentheses > around it. In most of Python, parentheses (if legal) have no effect > other than grouping; "a + b * c" is the same thing as "(a + b) * c", > just done in the other order. The last one is a clear demonstration > that "=" is a statement, not an expression. Are people confused by > this sort of thing: > > if x > 1: > print("x is more than 1") > (if x > 1:) > print("SyntaxError")
This is a very far-fetched example :) My point was that when you see lots of '=' and ':=' used at the statement level, one might try to write "if x = 1" instead of "if x := 1" -- boom, we have an unexpected SyntaxError for some users. In my opinion adding *any* assignment expression syntax to Python *will* create this sort of issues. PEP 572 isn't free of them, my proposal isn't free of them. My proposal doesn't add a new ':=' operator at the cost of slightly complicating rules around '='. PEP 572 avoids complicating '=', but adds an entirely new form of assignment. Yury _______________________________________________ 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