On Wed, Apr 25, 2018 at 12:54 AM, Anthony Flury via Python-Dev
As discussed previously by others on this exact proposals, you now have the issue of confusion when using keyword arguments : *my_func(a = b)* : clearly that is a call to `my_func' where argument a has the value of b, but if you want to do an assigment expression when calling the function you now have to do *my_func((a=b)) -* which frankly looks messy in my opinion; you get the same issue when you are wanting to do assignment expressions in tuples.
To be fair, function arguments already follow "practicality beats purity" in many ways. Let's look at tuples: x = 1, 2 # fine x = (1, 2) # fine x = 1, # fine, though not advisable x = (1,) # fine But if you're going to use a tuple literal as a function parameter, you have to give it extra parens: f((1, 2)) # one arg, a tuple f(1, 2) # two args The comma has multiple meanings, and it has to be disambiguated. The equals sign would be the same. I'm still strongly -1 on any proposal to have "=" mean assignment in any expression context, though. It is WAY too easy for a comparison to sneakily become an assignment, or to get bizarre syntax errors: x = 1 if (x = 2): ... This, according to your proposal, raises SyntaxError - not because a comparison was wanted and an assignment was made, but because the name already had a value. And, even worse, this is NOT an error: x = 1 def f(): if (x = 2): ... That's a bizarre distinction. ChrisA