[Python-Dev] replacing 'global' (original) (raw)
Michael Chermside mcherm at mcherm.com
Tue Oct 28 13:47:27 EST 2003
- Previous message: [Python-Dev] RE: cloning iterators again
- Next message: [Python-Dev] PEP 322: Generator Expressions (implementation team)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Alex lists this flaw:
-- it's the wrong keyword, doesn't really mean "global" Guido says: I haven't heard anyone else in this thread agree with you on that one. I certainly don't think it's of earth-shattering ugliness.
Well, I agree. But I also agree with your point that it's certainly not earth-shattering... just a little confusing to newbies, who expect "global" to mean "global", not "module-wide". Not worth changing the language, but if you were to re-invent Python from the ground up, I'd consider it.
Greg Ewing writes:
We'd be having two kinds of assignment, and there's no prior art to suggest to suggest which should be = and which :=. That's the "arbitrary" part.
No one will ever confuse these, because no one will learn about := until long after = is well understood. The one spelled "=" will be "the normal one" and ":=" will be "the funny one".
Just mentions:
(Alex noted in private mail that one disadvantage of this idea is that it makes using globals perhaps TOO easy...)
Indeed, that would be my concern. At least the word "global" has strong negative associations (mostly undeserved in this case since it really means "module-level" not "global" ;-).
Skip writes:
It seems that use of x := 2 and x = 4 should be disallowed in the same function so that the compiler can flag such mistakes.
I agree. When writing a function, we ALLOW name shadowing because we want the author of the function to be able to use local variables without having to know anything about the outer scope(s). But if the author of the function ALREADY KNOWS that there's an outer variable named "x" (MUST know it since she is modifying that outer variable), then there's no excuse for the poor choice of names... the local variable should be renamed to avoid the conflict. The "global" statement as it currently exists enforces this... if one assignment in a scope is "global", then ALL will be. I maintain that the use of := vs = should be the same... all or none!
Despite Just's original preference for thinking of it as "find somplace and rebind", I would always wind up thinking of this as the "bind in some outer scope" operator.
Anyhow, that's as far as I got in reading the discussion so far. Whew! What a lot of traffic!
-- Michael Chermside
- Previous message: [Python-Dev] RE: cloning iterators again
- Next message: [Python-Dev] PEP 322: Generator Expressions (implementation team)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]