On Sunday 26 October 2003 04:29, Guido van Rossum wrote:
How about adding a "rebinding" operator, for example spelled ":=":
a := 2
I expect Guido would object to that on the grounds that it's conferring arbitrary semantics on a symbol.
Hardly arbitary (I have fond memories of several languages that used :=).
Now, operator :=) MIGHT indeed be worth considering -- "rebinding assignment with a smile"!
Yes, of course := IS a very popular way to denote assignment.
But what is one to make of a function that uses both
a := 2
a = 2
What would astonish me least: the presence of a normal rebiding would ensure a is local. I would prefer, therefore, if the compiler AT LEAST warned about the presence of := at the same scope, and probably I'd be even happier if the compiler flagged it as an outright error. I just can't think of good use cases for wanting both at the same scope on the same name. I can think of a dubious one: a style where = would be used as "initializing declaration" for a name at function start, and all further re-bindings of the name systematically always used := -- I can think of people who might prefer that style, but it might be best for Python to avoid style variance by forbidding it (since it obviously can't be _mandated_, thanks be:-).
By forbidding compresence of = and := on the same name at the same scope, := becomes an unmistakable yet unobtrusive symbol saying "this assignment here is to a NON-local name", and thus amply satisfies my long-debated unease wrt "global".