错题本(名称空间)

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()

 

posted @   往昔遗忘  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示