Hello list
I am having trouble with a variable to act as a counter in a nested recursive function which will only occasionally find an answer. Something like a static variable in C.
Why does this sort of thing not work?
def foo (n): counter = 0 def choose (i): if (solution found): counter += 1 print counter, (solution) else choose (i+1) choose (1)
I get an error message that counter is referenced before being declared.
This is a limitation of Python's nested scopes. You can't assign to a variable in an enclosing scope. One way to work around this is to use a mutable value like a list in the enclosing scope:
def foo (n):
counter = [0]
def choose (i):
if (solution found):
counter[0] += 1
print counter[0], (solution)
else choose (i+1)
choose (1)
You could also write a counter class: class foo: def __init__ (n): self.counter = 0 def choose (self, i): if (solution found): self.counter += 1 print self.counter, (solution) else self.choose (i+1)
foo().choose (1)
I would suggest separating the counter from the solution checking though.
Declaring counter as global does not help either
No, then it just looks for counter in the global (module) namespace so it still doesn't find it.
Incidentally how does one nest comments in python. I want to comment out part of a line. Is it just Kate my editor which won't allow it
Use # to comment out to the end of a line. There is no way to comment out the middle of a line (like you could do in C or Java with /* stuff */)
Kent
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor