错题本(名称空间)
2.名称空间
名称空间就是内存中存放变量名和变量值绑定的地方。
名称空间分类:
(1)内置名称空间
python解释器 运行开始产生的名称空间,python解释器运行结束则释放,
例如len(), open(), del, print()
(2)全局名称空间
py文件运行开始产生的名称空间,py文件运行结束则释放,包括里边代码块中产生的变量。
例如
if True:
a = '123'
全局变量 name = '123'
if True:
a = 123 #123
print(a) #这就能解释为啥a没有全局定义,只在某个代码块内定义,但是在输出时,能够输出出来。这就是全局名称空间。
def func():
b=12
func()
print(b) #报错b未定义
(3)局部名称空间
方法运行开始产生的名称空间,方法执行结束则释放。
def func():
age = 12
这就涉及到变量的查找顺序:
在方法内,优先查找局部名称空间,然后查找全局名称空间,最后查找内置名称空间。
错题:
a = 1
def func():
print(a) #这里会报错,因为python解释器发现局部变量中有a,并且a=2,于是就不再适用a=1, 但是在解释执行时,发现a的定义在后边,于是报错。
a=2
print(a)
作用域:名称空间的作用范围就是作用域
如果在局部作用域中想要修改全局变量,有两种情况:
(1)如果在局部变量中想要修改全局的可变类型,直接修改即可,也就是list/dict在方法中被修改了,直接就改了
(2)如果在局部变量域中修改不可变类型,需要提前声明, global 变量名。
(3)如果局部名称空间想要修改局部名称空间中的不可变类型变量,则要使用, nonlocal,例如
def outer():
a = 100
def inner():
nonlocal a
a = 200
print()
inner()
print(a) #200
outer()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix