python 全局变量的理解(global关键字)
2015-04-23 16:06
731 查看
先看代码:
代码一:
代码一执行结果:
我们在代码一的基础上稍加修改
代码二:
代码二执行结果:
分析问题:我们在第4行给x试图重新赋值为2,此时由于变量作用域的原因,函数体中的变量x和函数体外的变量x被认为不是同一个变量,那么第三行的x因为没有被赋值所以执行时就会报错。
我们再对代码二稍作修改
代码三:
代码三执行结果:
此时的执行结果就符合我们的预期了。
结果分析,当加入global关键字以后,将x变量就设置成为了全局变量,也就是说无论函数体内或者函数体外都可以对这个变量进行操作(修改),但是所带来的问题就是变量的安全性问题,如果多个用户多该变量进行操作,最后变量的值就会变得不可预知。所以一般不建议使用全局变量。
全局变量的使用场景一般会出现在多线程中,一个线程开始对全局变量操作,此时先加互斥锁,当线程操作完释放以后其他线程才可以对该变量进行操作。此应用场景会再后续的博客中详细阐述。
代码一:
#!/usr/bin/python #coding:utf8 x = 20 def test(): print 'x= ',x test()
代码一执行结果:
x = 20
我们在代码一的基础上稍加修改
代码二:
x = 20 def test(): print 'x= ',x x = 2 print 'change x to ',x test()
代码二执行结果:
x= Traceback (most recent call last): File "D:\Demo\testGlobal.py", line 31, in <module> test() File "D:\Demo\testGlobal.py", line 27, in test print 'x= ',x UnboundLocalError: local variable 'x' referenced before assignment >>>
分析问题:我们在第4行给x试图重新赋值为2,此时由于变量作用域的原因,函数体中的变量x和函数体外的变量x被认为不是同一个变量,那么第三行的x因为没有被赋值所以执行时就会报错。
我们再对代码二稍作修改
代码三:
x = 20 def test(): global x print 'x= ',x x = 2 print 'change x to ',x test()
代码三执行结果:
x= 20 change x to 2 >>>
此时的执行结果就符合我们的预期了。
结果分析,当加入global关键字以后,将x变量就设置成为了全局变量,也就是说无论函数体内或者函数体外都可以对这个变量进行操作(修改),但是所带来的问题就是变量的安全性问题,如果多个用户多该变量进行操作,最后变量的值就会变得不可预知。所以一般不建议使用全局变量。
全局变量的使用场景一般会出现在多线程中,一个线程开始对全局变量操作,此时先加互斥锁,当线程操作完释放以后其他线程才可以对该变量进行操作。此应用场景会再后续的博客中详细阐述。
相关文章推荐
- 飘逸的python - 为什么修改全局的dict变量不用global关键字
- Python3基础 global关键字 使函数的局部变量升格为全局变量
- python基础 - global关键字及全局变量的用法
- python变量总结: 全局变量、局部变量、类变量、实例变量以及global和nonlocal关键字的使用示例
- Python 全局变量与global关键字
- Python学习笔记(7):global关键字及全局变量的用法
- 【python】为什么修改全局的dict变量不用global关键字
- python基础 - global关键字及全局变量的用法
- Python小白学习之路(十一)—【局部变量和全局变量】【关键字global】【关键字nonlocal】
- python 局部local和全局global变量
- 自定义函数内可以使用全局变量吗?答案是不可以,需要关键字global
- [Python学习] 专题六.局部变量、全局变量global、导入模块变量
- 为什么python在函数中修改"字典型全局变量"不需要global
- [Python学习] 专题六.局部变量、全局变量global、导入模块变量
- 关于python中的全局变量global
- python使用全局变量(global)
- python 局部变量和全局变量 global
- python 局部变量和全局变量 global
- python 局部变量和全局变量 global
- 使用global关键字在函数中访问全局变量