[Python-Dev] Is PEP 572 really the most effective way to solve the problems it's targeting? (original) (raw)

Tim Peters tim.peters at gmail.com
Thu Apr 26 20:46:02 EDT 2018


[Mike Miller]

- How are other modern languages solving this issue?

[Greg Ewing <greg.ewing at canterbury.ac.nz>]

In all the languages I can think of that allow assignments in expressions, there is only one assignment operator -- a stand alone assignment is just a bare assignment expression.

Pretty much so, but I don't know what "modern" means to Mike. The R language may set a record for, umm, innovation here:

""" There are three different assignment operators: two of them have leftwards and rightwards forms.[1] """

So there are 5 assignment operator spellings in R:

= <- -> <<- ->>

Note that the link doesn't tell the whole story either; e.g., they don't all have the same precedence level. And, in addition to the 5 infix spellings shown above, there are also prefix (looks like a 2-argument function call) spellings.

Back on Earth ;-) , I think it's worth it to point out that only languages (with assignment expressions) aping C use "=" for assignment and "==" for equality. That was a Really Bad Idea that all other (not aping C) languages I know of avoided.

But I'm not sure any of this is relevant to what Mike meant by "this issue".

But those languages were all designed that way from the start. I'm not aware of any that began by forbidding assignment in expressions and then added it later.

Me neither. It's certainly the case that Guido would not have designed a language that aped C's poor decision here. At its very start, Python used "=" for both assignment and equality testing (and == was a syntax error). So I think it's evident that, at the time, he didn't envision ever adding assignment expressions.

[1] https://www.rdocumentation.org/packages/base/versions/3.5.0/topics/assignOps



More information about the Python-Dev mailing list