1

重複の可能性:
Pythonの内部関数から関数変数を変更します

私はこのPythonコードを持っていると言います

def f():
    x=2
    def y():
        x+=3
    y()

これは発生します:

UnboundLocalError: local variable 'x' referenced before assignment

local variable 'x'では、内部関数からどのように「変更」するのでしょうか。内部関数でxをグローバルとして定義すると、エラーも発生しました。

4

1 に答える 1

9

nonlocalPython3でステートメントを使用できます。

>>> def f():
...     x = 2
...     def y():
...         nonlocal x
...         x += 3
...         print(x)
...     y()
...     print(x)
...

>>> f()
5
5

Python 2では、同じことを実現するために、外部関数の属性として変数を宣言する必要があります。

>>> def f():
...     f.x = 2
...     def y():
...         f.x += 3
...         print(f.x)
...     y()
...     print(f.x)
...

>>> f()
5
5

dictionaryまたはを使用して、またはを使用することもできますlist

>>> def f():
...     dct = {'x': 2}
...     def y():
...         dct['x'] += 3
...         print(dct['x'])
...     y()
...     print(dct['x'])
...

>>> f()
5
5
于 2012-12-24T20:37:24.027 に答える