accumulator generators
Diez B. Roggisch
deets at nospam.web.de
Fri May 30 16:04:15 EDT 2008
Cameron schrieb:
> I was reading this <a href="this http://www.paulgraham.com/icad.html">Paul
> Graham article</a> and he builds an accumuator generator function in
> the appendix. His looks like this:
>
> <pre>
> def foo(n):
> s = [n]
> def bar(i):
> s[0] += i
> return s[0]
> return bar
> </pre>
>
> Why does that work, but not this:
>
> <pre>
> def foo(n):
> s = n
> def bar(i):
> s += i
> return s
> return bar
> </pre>
Because python's static analysis infers s as being a variable local to
bar in the second case - so you can't modify it in the outer scope.
In the future, you may declare
def bar(i):
nonlocal s
...
Diez
More information about the Python-list
mailing list