4

外側の関数変数を取得して出力しても問題ありませんa

def outer():
    a = 1
    def inner():
        print a

外側の関数配列を取得してa何かを追加することもできます

def outer():
    a = []
    def inner():
        a.append(1)
        print a

ただし、整数を増やそうとすると、問題が発生しました。

def outer():
    a = 1
    def inner():
        a += 1 #or a = a + 1
        print a

>> UnboundLocalError: local variable 'a' referenced before assignment

なぜこれが起こるのか、どうすれば目標を達成できますか (整数を増やす)?

4

3 に答える 3

5

nonlocalPython 3では、キーワードを使用してこれを行うことができます。非ローカルとしてマークするnonlocal aために最初に行います。innera

Python2ではそれは不可能です。

于 2012-12-21T07:01:10.333 に答える
3

これを行うための一般的にクリーンな方法は次のとおりです。

def outer():
    a = 1
    def inner(b):
        b += 1
        return b
    a = inner(a)

Pythonでは多くのことが可能ですが、非ローカル変数は一般に「ダーティ」と見なすことができます(ここでは詳しく説明しません)。

于 2012-12-21T07:04:18.123 に答える
3

Workaround for Python 2:

def outer():
    a = [1]
    def inner():
        a[0] += 1
        print a[0]
于 2012-12-21T07:43:53.123 に答える