首页 > 其他 > 详细

名称空间和作用域

时间:2021-03-30 22:05:13      阅读:21      评论:0      收藏:0      [点我收藏+]

名称空间和作用域

名称空间

名称空间Namespaces:存放名字与其对应的内存地址的地方

1、内置名称空间

存放的是python解释器自带的名字
生命周期:解释器启动则产生,解释器关闭则销毁

2、全局名称空间

存放的是顶级的名字
生命周期:py程序刚开始运行则立即产生,py程序结束则销毁
x = 10    # 全局
if True:
    y = 2 # 全局
def foo():# foo顶级,全局 
    z = 3 # z不是顶级

3、局部名称空间

存放的是函数内的名字
生命周期:函数调用则产生,函数调用结束则销毁
x = 5
def f1():
    x = 10 # 只作用在局部
    print(x)
f1()
# 10

LEGB:

L : 当前函数空间
E :外层函数空间
G :全局函数空间
B :内置函数空间
# name查看顺序:局部名称空间--->全局名称空间--->内置名称空间
# 需要注意的是:在全局无法查看局部的,在局部可以查看全局的
name = ‘tom1‘
def na():
    name = ‘tom2‘
    def na2():
        name = ‘tom3‘
        print(name)
    na2()
    print(name)
print(name)
na()

LEGB总结:

1、名字的访问优先级:
基于自己所在位置向外一层一层寻找,L->E->G->B
2、名称空间的‘嵌套’关系是在函数定义阶段,扫描语法时生成的,与调用位置无关

4、全局作用域:内置名称空间、全局名称空间

内置名称空间与全局名称空间属于该范围
特点:全局存活,全局有效

5、局部作用域:局部名称空间

局部名称空间属于该范围
特点:临时存活,局部有效

global:

用来在局部修改全局的不可变类型的值

nonlocal:

用在局部修改局部的不可变类型的值,范围只在E
x = 10
def nax():
    # global x
    x = 5
    def naa():
        # global x
        # nonlocal x
        x = 3
    naa()
    print(x)
nax()

名称空间和作用域

原文:https://www.cnblogs.com/BaiJiaZhengMing/p/14598319.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!