On Wed, Apr 25, 2018 at 12:54 AM, Anthony Flury via Python-Dev <python-dev@python.org> wrote: > 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 _______________________________________________ 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