pythonのスコープ

エラーになる。

def f():
    x = 0
    def g():
        x += 1
        print x
    g()

f()
# UnboundLocalError: local variable 'x' referenced before assignment

primitiveな値ではなく、オブジェクトなどの参照を保持する値を使えば大丈夫.

class Ref(object):
    def __init__(self, val):
        self.val = val
    def __call__(self, n=None):
        if n:
            self.val = n
        return self.val

def f():
    x = Ref(0)
    def g():
        x(x() + 1)
        print x()
    g()

f()
# 1