problem with 'global'

Mel mwilson at the-wire.com
Sun Jan 20 23:09:32 EST 2008


oyster wrote:
> why the following 2 prg give different results? a.py is ok, but b.py
> is 'undefiend a'
> I am using Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC
> v.1310 32 bit (Intel)] on win32
> #a.py
> def run():
>         if 1==2:                # note, it always False
>         global a
>         a=1
> 
> run()
> a
> 
> #b.py
> def run():
>         a=1
> 
> run()
> a

The docs seem to be in <http://www.python.org/doc/2.4/ref/global.html> 
but don't look all that helpful.  Probably the key is that global is 
not an executable statement, and isn't affected by being subordinate 
to an if statement.  In a.py the function has been primed to define a 
in the global namespace.  In b.py, not.

Docs do describe global as a "directive to the parser", even though 
it's lumped in with normal statements like print, return, yield, 
raise, etc.

	Mel.



More information about the Python-list mailing list