global, was Re: None assigment
Michael Hudson
mwh21 at cam.ac.uk
Fri Feb 9 03:18:32 EST 2001
More information about the Python-list mailing list
Fri Feb 9 03:18:32 EST 2001
- Previous message (by thread): global, was Re: None assigment
- Next message (by thread): global, was Re: None assigment
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
"Rainer Deyke" <root at rainerdeyke.com> writes: > Strangely enough, it does work. I'm really confused now. My understanding > had been that 'global' is not a normal statement executed at run-time, but > something which modifies the meaning of a name for the whole function. It > seems I was right about the former but wrong about the latter. Consider the > following: > > b = 6 > > def foo(): > b = 4 > if 0: > global b > print b > > def bar(): > b = 4 > if 1: > global b > print b > > def baz(n): > b = 4 > if n: > global b > print b > > foo() # Prints '4'. > bar() # Prints '6'. > baz(0) # Prints '6', not '4'! > baz(1) # Print '6'. > > (None of them modified the global variable 'b'.) > > > From this I conclude that the behavior of 'global' is totally > unpredictable except when it is placed above all non-'global' > statements in a function. Which version are you using? They all print 4 for me, and all but foo() do modify the value of `b'. foo() doesn't because what follows an if 0: isn't compiled. Cheers, M. -- Premature optimization is the root of all evil in programming. -- C.A.R. Hoare
- Previous message (by thread): global, was Re: None assigment
- Next message (by thread): global, was Re: None assigment
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list