On 05/24/2012 09:23 PM, SherjilOzair wrote: > def adder(): > s = 0 > def a(x): > s += x > return sum > return a > > pos, neg = adder(), adder() > for i in range(10): > print pos(i), neg(-2*i) > > This should work, right? Why does it not? >
Guess that depends on what you mean by work. First, it gets a syntax error on the print function call, because you omitted the parens. When I fixed that, I got UnboundLocalError: local variable 's' referenced before assignment so I fixed that, and got inconsistent use of tabs and spaces in indentation because you mistakenly used tabs for indentation. Then I got the output <built-in function sum> <built-in function sum> because sum is a built-in function. Presumably you meant to return s, not sum. Here's what I end up with, and it seems to work fine in Python 3.2 on Linux: def adder(): s = 0 def a(x): nonlocal s s += x return s return a pos, neg = adder(), adder() for i in range(10): print (pos(i), neg(-2*i)) ..... Output is: 0 0 1 -2 3 -6 6 -12 10 -20 15 -30 21 -42 28 -56 36 -72 45 -90 -- DaveA -- http://mail.python.org/mailman/listinfo/python-list