Python中的全局变量
2008-11-28 16:51
288 查看
全局变量不符合参数传递的精神,所以,平时我很少使用,除非定义常量。今天有同事问一个关于全局变量的问题,才发现其中原来还有门道。
程序大致是这样的:
CONSTANT = 0
def modifyConstant() :
print CONSTANT
CONSTANT += 1
return
if __name__ == '__main__' :
modifyConstant()
print CONSTANT
运行结果如下:
UnboundLocalError: local variable 'CONSTANT' referenced before assignment
看来,全局变量在函数modifyConstant中边成了局部变量,似乎全局变量没有生效?
做点修改:
CONSTANT = 0
def modifyConstant() :
print CONSTANT
#CONSTANT += 1
return
if __name__ == '__main__' :
modifyConstant()
print CONSTANT
运行正常,看来函数内部是可以访问全局变量的。
所以,问题就在于,因为在函数内部修改了变量CONSTANT,Python认为CONSTANT是局部变量,而print CONSTANT又在CONSTANT += 1之前,所以当然会发生这种错误。
那么,应该如何在函数内部访问并修改全局变量呢?应该使用关键字global来修饰变量(有点像PHP):
CONSTANT = 0
def modifyConstant() :
global CONSTANT
print CONSTANT
CONSTANT += 1
return
if __name__ == '__main__' :
modifyConstant()
print CONSTANT
就这么简单!
程序大致是这样的:
CONSTANT = 0
def modifyConstant() :
print CONSTANT
CONSTANT += 1
return
if __name__ == '__main__' :
modifyConstant()
print CONSTANT
运行结果如下:
UnboundLocalError: local variable 'CONSTANT' referenced before assignment
看来,全局变量在函数modifyConstant中边成了局部变量,似乎全局变量没有生效?
做点修改:
CONSTANT = 0
def modifyConstant() :
print CONSTANT
#CONSTANT += 1
return
if __name__ == '__main__' :
modifyConstant()
print CONSTANT
运行正常,看来函数内部是可以访问全局变量的。
所以,问题就在于,因为在函数内部修改了变量CONSTANT,Python认为CONSTANT是局部变量,而print CONSTANT又在CONSTANT += 1之前,所以当然会发生这种错误。
那么,应该如何在函数内部访问并修改全局变量呢?应该使用关键字global来修饰变量(有点像PHP):
CONSTANT = 0
def modifyConstant() :
global CONSTANT
print CONSTANT
CONSTANT += 1
return
if __name__ == '__main__' :
modifyConstant()
print CONSTANT
就这么简单!
相关文章推荐
- 兄弟连学Python(5)—局部变量和全局变量
- python局部变量和全局变量
- python中的局部变量与全局变量
- python的全局变量(属性的用法),私有属性,计算对象引用数
- python 全局变量引用与修改
- python全局变量
- python第十篇之-全局变量
- [Python学习] 专题六.局部变量、全局变量global、导入模块变量
- python通过配置文件共享全局变量
- python第十课笔记(本地变量和全局变量)
- Python实现全局变量的两个解决方法
- Python3学习笔记4-函数,全局变量&局部变量,内置函数
- python中list作为全局变量无需global声明的原因
- python函数中使用全局变量
- python 全局变量的使用
- python 全局变量多个模块访问
- python里面的全局变量和局部变量的区别小讲
- Python中的局部变量和全局变量
- Python 全局变量的使用
- 【python】*函数:全局局部变量、内部函数、闭包