Walt Mankowski on 4 Oct 2004 15:00:03 -0000 |
On Mon, Oct 04, 2004 at 10:35:34AM -0400, Jeff Abrahamson wrote: > In a python program I want to have a global counter that's available > from different functions. > > I'm not getting it right and reading the manual hasn't helped yet. > Anyone know what it is I want to do? > > In the snippet below, I'm hoping foo() will side-effect the global > num. It doesn't. > > Thanks much for any suggestions. > > jeff@asterix:AI-hw $ python > Python 2.3.4 (#2, Jul 5 2004, 09:15:05) > [GCC 3.3.4 (Debian 1:3.3.4-2)] on linux2 > Type "help", "copyright", "credits" or "license" for more information. > >>> global num > >>> num = 0 > >>> def foo(): > ... num += 5 > ... print num > ... > >>> num > 0 > >>> foo() > Traceback (most recent call last): > File "<stdin>", line 1, in ? > File "<stdin>", line 2, in foo > UnboundLocalError: local variable 'num' referenced before assignment > >>> You have to declare num as global in the *function*, not in the outer scope. So this works: num = 1 print num def foo(): global num num += 5 print num foo() print num I can't find a good explanation of why exactly this works in the online tutorial, and my python's a bit rusty. Python's scoping rules are strange, but I don't remember exactly *how* they're strange. I'll try to check my python books when I get home tonight. Walt Attachment:
signature.asc
|
|