python 全局变量的理解(global关键字)

先看代码:

代码一:

#!/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变量就设置成为了全局变量,也就是说无论函数体内或者函数体外都可以对这个变量进行操作(修改),但是所带来的问题就是变量的安全性问题,如果多个用户多该变量进行操作,最后变量的值就会变得不可预知。所以一般不建议使用全局变量。

全局变量的使用场景一般会出现在多线程中,一个线程开始对全局变量操作,此时先加互斥锁,当线程操作完释放以后其他线程才可以对该变量进行操作。此应用场景会再后续的博客中详细阐述。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值