变量是映射到对象的名称(标识符)。命名空间是变量名(键)及其对应对象(值)的字典。
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