Python中的命名空间和作用域

变量是映射到对象的名称(标识符)。命名空间是变量名(键)及其对应对象(值)的字典。

Python语句可以访问本地命名空间和全局命名空间中的变量。如果局部变量和全局变量具有相同的名称,则局部变量将覆盖全局变量。

每个函数都有其自己的本地命名空间。类方法遵循与普通函数相同的作用域规则。

Python对变量是局部变量还是全局变量进行了有根据的猜测。它假定在函数中分配了任何值的任何变量都是局部变量。

因此,为了向函数内的全局变量分配值,必须首先使用global语句。

语句global VarName告诉Python VarName是全局变量。Python停止在本地命名空间中搜索变量。

例如,我们在全局命名空间中定义一个变量Money。在Money函数中,我们为Money分配一个值,因此Python假定Money为局部变量。但是,我们在设置之前访问了局部变量Money的值,因此结果为UnboundLocalError。取消注释全局语句即可解决该问题。

#!/usr/bin/python
Money = 2000
def AddMoney():
# Uncomment the following line to fix the code:
# global Money
Money = Money + 1
print Money
AddMoney()
print Money