作用域
作用域
【一】什么是作用域
- 变量的作用域
- Python是静态作用域,变量的作用域源于它在代码中的位置
- 在不同的位置,可能有不同的命名空间,命名空间是变量作用域的体现形式
【二】一个例子
- 整个电脑系统,硬盘和系统 --->前人约定俗成
- 名称空间 --->内建 局部 全局
- 存放变量名和变量关系的地方 --->内存中/硬盘中
【三】四种作用域
【1】内置作用域
Python解释器自带的作用域
【2】全局作用域
全局名称空间
【3】局部作用域
在函数内部或者是类内部的名称空间
a = 1
def func():
b = 2
print(a)
print(b)
print(a)
print(b) # 报错,全局作用域不能使用局部作用域中的变量
【4】嵌套作用域
在函数内部的函数的名称空间
def outer():
def inner():
...
...
在inner()里面的作用域就是嵌套作用域
a = 1
def func():
b = 2
def inner():
c=3
print(c)
print(a)
print(b)
print(c)# 报错
print(c) # 报错
print(a)
print(b) # 报错
在局部修改全局变量
使用 global 在局部将局部变量的等级提升为全局
# 一般用在不可变数据类型上
a = 1
def func():
global a
a = '2'
print(a)
func()
print(a)
局部变量等级提升后 提升前
2 2
2 1
【5】在内嵌函数中修改外部函数的变量
在内嵌函数中修改外部函数的变量值不能使用global
要使用nonlocal 来提升内嵌函数的变量的等级到外部
a = 1
def func():
global a
a = 2
b = 3
def inner():
global b
b = 4
print(b)
inner()
print(b)
func()
inner()中的b 提升前 提升后
4 4
3 3
global b 没有提升成功
使用nonlocal
将 global b 改为 nonlocal b
提升前 提升后
4 4
3 4
【6】LEGB规则
(1)作用域的加载顺序
- B:built-in 内置变量
- G:global 全局变量
- L: locals() 局部变量
- E:enclose function locals 内嵌变量
(2)作用域的查找顺序
- 如果在全局
- 全局 --> 内建
- 如果在局部
- 局部 -- >全局 --> 内建
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?