目录
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