Python中的范围

Scope in Python

本问题已经有最佳答案,请猛点这里访问。

我使用的是python2.7,但对于在python中定义作用域仍然很困惑。我无法解释为什么会发生这种情况。有人可以帮我。事先谢谢。

案例1:

1
2
3
4
5
x = 1
def func():
    print x

func()

结果:

1
1

案例2:

1
2
3
4
5
x = 1
def func():
    print x
    x = 9
func()

结果:

1
UnboundLocalError: local variable 'x' referenced before assignment

当我在案例2中添加行x = 9时,发生了一个错误。


如果在方法中重新分配外部变量,则应使用全局:

1
2
3
4
5
6
x = 1
def func():
    global x
    print x
    x = 9
func()

对于可变变量(如list或dict),当您只需要修改内部状态(list.append、list.pop)时,您不需要全局关键字。