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
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to