当在函数内部使用变量时,会首先在函数内部查找局部变量,如果找不到再去全局查找
1.函数内部找到
number=1 #全局变量
def testGlobal():
number=2 #局部变量
return number
num=testGlobal()
print(f"局部number:{num}") # 2
print(f"全局number:{number}") # 1
2.全局找到
number=1 #全局变量
def testGlobal():
return number
num=testGlobal()
print(f"局部number:{num}") # 1
print(f"全局number:{number}") # 1
3.global
如果在函数内部直接使用全局变量,则需要使用global
关键字
number=1 #全局变量
def testGlobal():
global number#告诉编译器我这里的number指的是全局变量number
number=2
return number
num=testGlobal()
print(f"局部number:{num}") # 2
print(f"全局number:{number}") # 2
线程共享全局变量,包括普通变量,列表,字典等
from threading import Thread
import time
g_num = 100
def work1():
global g_num
g_num += 1
print(f"work1, g_num:{g_num}")
def work2():
global g_num
print(f"work2, g_num:{g_num}")
t1 = Thread(target=work1)
t1.start() # work1, g_num:101
time.sleep(1) #保证t1线程中的事情做完
t2 = Thread(target=work2)
t2.start() # work2, g_num:101
2.线程安全
https://docs.python.org/3/glossary.html#term-global-interpreter-lock
https://blog.csdn.net/u010649766/article/details/79740873
http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm
参考:
https://www.jb51.net/article/184927.htm