如何在Python中从内部函数更改外部函数局部变量?

时间:2012-12-24 20:35:45

标签: python

  

可能重复:
  Modify the function variables frominner function in python

说我有这个python代码

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

这引起了:

UnboundLocalError: local variable 'x' referenced before assignment

那么,如何从内部函数“修改”local variable 'x'?在内部函数中将x定义为全局也会引发错误。

1 个答案:

答案 0 :(得分:9)

您可以在Python 3中使用nonlocal statement

>>> 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

或使用我们也可以使用dictionarylist

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

>>> f()
5
5