[Python-Dev] Re: closure semantics

Guido van Rossum guido at python.org
Wed Oct 22 01:00:21 EDT 2003


> Is there any good reason to ever use globals anywhere other than as
> the first statement (after doc string) of a function?

If the use of the global is fairly localized, I sometimes like to have
the global declaration immediately proceed the first use, assuming all
other uses are in the same indented block.  (This means that I
sometimes *do* have global inside flow control, but then all uses are
also inside the same branch.)

But I'm not sure this is a *good* reason.

> If not, could its usage be so restricted (like __future__ import)?

This would break way too much stuff.  It would have been a good idea
for 0.1.  But then I was trying to keep the grammar small
while keeping syntactic checks out of the compilation phase if at all
possible, and I thought "screw it -- if import can go anywhere, so can
global."

> > > Plus. EVERY newbie makes the mistake of taking "global" to mean
> > > "for ALL modules" rather than "for THIS module",
> 
> Part of my brain still thinks that, and another part has to say,
> 'no, just modular or mod_vars()'.
> 
> > Only if they've been exposed to languages that have such globals.
> 
> Like Python with __builtins__?  which I think of as the true globals.

Hardly, since they aren't normally thought of as variables.

> Do C or Fortran count as such a source of 'infection'?

C, definitely -- it has the concept and the terminology.  In Fortran,
it's called common blocks (similar in idea to ABC's SHARE).

> > > uselessly using global in toplevel,
> >
> > Which the parser should reject.
> 
> Good.  The current nonrejection sometimes leads beginners astray
> because they think it must be doing something.

Just like

   x + 1

I suppose.  I'm sure PyChecker catches this.

> While I use global/s() just fine, I still don't like the names.  I
> decided awhile ago that they must predate import, when the current
> module scoop would have been 'global'.

No, they were both there from day one.

Frankly, I don't think in this case newbie confusion is enough of a
reason to switch from global to some other keyword of mechanism.

Yes, this means I'm retracting my support for Alex's
"replace-global-with-attribute-assignment" proposal -- Jeremy's
objection made me realize why I don't like it much.

--Guido van Rossum (home page: http://www.python.org/~guido/)



More information about the Python-Dev mailing list