03-多线程共享全局变量
import threading import time num = 100 def test1(): global num num += 1 print("test1=====>%d" %num) def test2(): print("test2=====>%d" %num) def main(): t1 = threading.Thread(target = test1) t2 = threading.Thread(target = test2) t1.start() time.sleep(0.5) t2.start() time.sleep(0.5) print(num) if __name__ == "__main__": main()
我们来看一下上述代码的执行情况:
从上面的执行情况中我们能可以看到多线程之间共享全局变量。
全局变量的修改方式
直接对变量进行修改,不加global,会报错。代码以及执行效果如下:
1 num = 100 2 ls = [10, 11] 3 4 5 def main(): 6 num += 1 7 print(num) 8 ls.append(12) 9 print() 10 11 12 if __name__ == "__main__": 13 main()
咱们在修改变量之前,先用global声明一下变量,就不会报错
1 num = 100 2 ls = [10, 11] 3 4 5 def main(): 6 global num 7 num += 1 8 print(num) 9 ls.append(12) 10 print() 11 12 13 if __name__ == "__main__": 14 main()
但是咱们发现,修改数列的时候并不需要使用global进行修改。
总结:
如果咱们修改的是变量的指向,那么这个时候就需要进行声明
如果咱们并没有修改变量的指向,仅仅是修改变量指向的值,那么就不需要声明。