python中必须使用global声明全局变量的情况
来源:互联网 发布:银行卡被网络盗刷 编辑:程序博客网 时间:2024/06/06 21:35
以下是一个多线程的python代码片段,其中的x,l都是全局变量,但在threadcode()函数中只声明了global x没有global l。完整的代码是可以成功运行,但是把global x注释掉后就会报错。这是为什么,Lock对象比较特殊吗?
import threading, time, sysx = 50l = threading.Lock()def threadcode(): global x l.acquire() print 'Thread %s invoked.' % threading.currentThread().getName() try: print 'Thread %s running.' % threading.currentThread().getName() x = x + 50 print 'Thread %s set x to %d.' % \ (threading.currentThread().getName(), x) finally: l.release()......推广一下,就成了在什么情况下必须使用global声明全局变量的问题。这段代码不用在函数中声明global x也可以打印出x的值
x = 20def getx(): print xgetx()在segmentfault上提问,得到了这样的回答
对于Python2而言,对于一个全局变量,你的函数里如果只使用到了它的值,而没有对其赋值(指a = XXX这种写法)的话,就不需要声明global。相反,如果你对其赋了值的话,那么你就需要声明global。声明global的话,就表示你是在向一个全局变量赋值,而不是在向一个局部变量赋值。
这样一来就清楚了。原因想来应该是这样,如果在函数内对一个全局变量赋值而没有提前声明的话,它会被当成一个与全局变量同名的局部变量,像这样
x = 20def getx(): x = 50 print xgetx()#print 50
所以如果把第一段代码中的global x注释掉,执行到x = x + 50就报错,因为这里的x既不是全局变量,也没有作为局部变量被初始化。而对于l,因为它是一个对象,调用对象成员函数和访问普通变量的值一样,所以也不需要事先声明其为全局变量,就像下面这样。
class A: def __init__(self, x): self.x = x def setx(self, x): self.x = xa = A(50)def func(): a.setx(20) print a.xfunc()#print 20
- python中必须使用global声明全局变量的情况
- python 使用全局变量 global
- javascript中必须使用var声明局部变量的情况
- python 的全局变量global变量使用
- php 中全局变量global 的使用
- php 中全局变量global 的使用
- php 中全局变量global 的使用
- python使用全局变量(global)
- global声明全局变量
- Python基础学习篇——Global全局变量的使用
- Python基础学习篇——Global全局变量的使用
- 全局变量关键字global的使用
- c++中全局变量的声明与使用
- PHP中全局变量的使用global和$GLOBALS[]
- PHP中全局变量的使用global和$GLOBALS[]
- PHP中全局变量的使用global和$GLOBALS[]
- PHP中全局变量的使用global和$GLOBALS[]
- PHP中全局变量的使用global和$GLOBALS[]
- KL25的启动顺序
- page request session application 作用域
- 新手必知20点VC技巧【转】
- JS部分
- 智联招聘简历刷新器
- python中必须使用global声明全局变量的情况
- 51Job简历刷新器
- 判断一个单链表是否有环
- 猎聘网Lietou简历刷新器
- 判断整数
- VC++动态链接库编程之DLL木马
- ZOJ 3542 Hexadecimal View(字符串)
- 求职助手
- django入门笔记5- model