[Python-Dev] replacing 'global'
Alex Martelli
aleaxit at yahoo.com
Sun Oct 26 13:35:35 EST 2003
On Sunday 26 October 2003 05:25 pm, Just van Rossum wrote:
> Phillip J. Eby wrote:
> > If we have a rebinding operator, I'd rather it be something
> > considerably more visible than the presence or absence of a ':' on an
> > assignment statement.
>
> I don't know, but somehow I don't have a problem spotting augmented
> assignments, so I don't think := will be as hard to miss as you suggest.
I agree -- := isn't any less "visible" than, say, -= .
> > So far, all the examples have been downright scary in the
> > invisibility of what's happening. Mostly, I can imagine some poor
> > sap trying to debug a program that uses := and is missing one
> > somewhere or has one where it's not intended -- and hoping that poor
> > sap won't be me. :)
>
> How is that different from a '-=' that should have been a plain '='?
> Also, if := is disallowed to rebind in the _same_ scope, this problem
> would be spotted by the compiler.
Not always (the = that should have been a := won't be, for example),
but pretty often (more often than the errant -= will be;-). Worst case
it's not any worse than the dreaded "typo in variable name" whereby
somebody assigns to, e.g., "accounts__receivable" where they meant
to assign to "accounts_receivable" -- people who are new to Python
are terrified of that possibility, and demand declarations to take care of
it, but long-time practitioners know it's not all that huge a danger.
> > I've mostly stayed out of this discussion, but so far something like
> > the scope(function).variable proposals, with perhaps a special case
> > for scope(global) or scope(globals) seems to me like the way to go.
> > It seems very Pythonic, in that it is explicit and calls attention to
> > the fact that something special is going on, in a way that ':=' does
> > not.
>
> The reverse argument can be made, too: := calls attention to the fact
> that something is happening right there, whereas a declaration may be
> many lines away.
Right (that's part of why i do not like declarations!-), but the proposal
Phillip is referring to would have "scope(foo).x = 23" ``right here'' just
as "x := 23" would. Actually, speaking as the original author of the
'scope' proposal, I think I now prefer your := when taken in the
simplest, most effective form -- took me a while to convince myself
of that, but it grew on me.
> > And 'scope' can be looked up in a manual more easily than ':='
> > can. Last, but not least, ':=' looks enough like normal assignment
> > in other languages, that somebody just plain might not notice that
> > they *need* to look it up.
>
> That's a good point.
Well, if they're looking at a function that ONLY has := in isolation and
no occurrence of = -- and their grasp of Python is so scarce that they
don't realize = is Python's normal assignment. Doesn't seem like a
particularly scary combination of circumstances to me, to be honest.
Alex
More information about the Python-Dev
mailing list