python变量域 global关键字

Python变量的作用域一共有4种,分别是:

L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

对于全局变量的修改,如果全局变量是int或者str,那么如果想要在函数中对函数变量进行修改,则需要先在函数内,声明其为global,再进行修改如果是list或者dict则可以直接修改

注:即使变量同名,优先引用的是局部变量。

闭包的情况,如果内部函数没有局部变量,则会优先引用闭包的环境变量
例如下图中:x = 5 是闭包的环境变量,x = 4是局部变量

在这里插入图片描述

内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改的时候,此时 Python 会认为它是一个局部变量,而函数中并没有 x 的定义和赋值,所以报错。
但是global x后,不会报错。最终全局变量也被修改为 x = 6

def func_c():
	global x
	x = x + 1
	print(x)

原因:在func_c函数中,x = x + 1原本会先找x的定义与赋的初始值,结果发现func_c()中没有,于是认定x为未定义的变量即报错。但是将x 声明为global后,知道x是全局变量即已经定义且声明过的变量,是可以直接如此进行加法操作。于是往func_c函数外去找到x = 5代入进去得到 x = 6
最终全局变量x被修改为6

猜你喜欢

转载自blog.csdn.net/angelsweet/article/details/114681611
今日推荐