Python 函数引用全局变量
一、LEGB规则:
python对四个命名空间分别作一个字典(键值对),以判断变量属于哪个命名空间。
1.L :局部命名空间。
2.E :外部函数命名空间。
3.G :全局命名空间。
4.B :内置模块命名空间
二、函数内使用外部变量的问题
(1) 单纯引用全局变量
-
a = 5 def func(): b = a +1 print(a) #直接引用全局变量a,无需global func()
(2) 对全局变量赋值
函数内出现赋值语句,则作为局部变量
-
c = 999 def func(): c = 5 print(id(c)) func() print(id(c)) #1785653297520 #1785654340048 #地址改变了,函数内的变量c是局部变量 -
a = 5 def func(): global a a = a + 1 #函数内出现赋值语句,则函数内a是新创建的局部变量,但是后面引用局部变量a未赋值,为防止此类问题,则需要global
(3) 创建全局变量同名的局部变量
-
a = 5 def func(): a = 6 print(a) #实际上创建局部变量a,覆盖全局变量a,无需global func()

浙公网安备 33010602011771号