【Python】关于python里的global、__globals__、全局变量与多进程的一点理解

本文详细探讨了Python中的全局变量、`global`关键字的作用,以及在多进程中的行为。在单个模块内,未声明`global`时全局变量可读但不可写,声明后则全局可读,局部可写。多个模块间的全局变量不互通,每个模块有自己的作用域。多进程中,全局变量由于进程隔离而不互通,即使ID相同,也是各自独立的内存副本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 单个模块内global

总结: global a表示a为本py模块内均可读、局部(仅本函数内,本函数内部调用的其他函数不包括在内)可写。(这里读与写是个人理解的方式,并不代表python的真正机制,只是好记)

1. 1 先不global的话的情况是:可读但不可写

# foo.py
# 代码1
a = 3

def f():
	b = a + 1
	print(b)
	
if __name__ == '__main__':
	f()

结果是4,表明可以读到a

# foo.py
# 代码2
a = 3

def f():
	a = a + 1
	print(b)
	
if __name__ == '__main__':
	f()

结果报错,这里就表示不可写。但是仍有个问题:

1.1.1 python语句左右读的问题(未解决)

# foo.py
# 代码3
import dis

a = 3

def f():
	b = a + 1
	print(a)
	
if __name__ == '__main__':
	print(dis.dis(f))

dis函数式可以看到cpu的运行过程,结果是:

  8           0 LOAD_GLOBAL              0 (a)
              2 LOAD_CONST               1 (1)
              4 BINARY_ADD
              6 STORE_FAST               0 (b)

  9           8 LOAD_GLOBAL              1 (print)
             10 LOAD_GLOBAL              0 (a)
             12 CALL_FUNCTION            1
             14 POP_TOP
             16 LOAD_CONST               0 (None)
             18 RETURN_VALUE
None

这里直接看每一行表示运行的步骤,首先导入的是全局变量a。可以看出这里把a看成的是全局变量,是可以读到的。接下来看一下a = a + 1会怎么样:

# foo.py
# 代码4
import dis

a = 3

def 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值