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