名称空间和作用域

发布时间 2023-10-20 16:13:34作者: Rubbish雀

名称空间和作用域

名称空间

存放名字(变量名/函数名)

内置名称空间

python解释器独有的

len([1,2,3,])
int('10')

函数调用必须要定义,但是你使用内置方法的时候从来没定义过,Python解释器启动的时候python自动开辟内置名称空间存放了这些python的内置方法,python解释器停止解释之后才会销毁

全局名称空间

除了内置和局部,其他的全都是全局

全局需要自己定义,python文件执行之后才可能有全局名称空间,文件结束之后才会销毁

局部名称空间

函数内定义的变量名/函数名都存在局部名称空间

局部也需要自己定义,必须是在函数调用之后才会生成,调用结束之后就会销毁

![](D:\python\05 函数\day012\day 12\04 名称空间.png)

![全局作用域和局部作用域](D:\python\05 函数\day012\day 12\全局作用域和局部作用域.png)

三种名称空间的执行顺序

内置 --> 全局 --> 局部

三种名称空间的查找顺序

--> 局部 -->全局 -->内置

作用域

产生作用的范围

作用域关系在函数定义阶段就已经确定死了-

全局作用域

全局+内置名称空间的变量,全局作=作用域中的变量只能在全局中使用

局部作用域

局部名称空间中的变量,局部作用域中的变量只能在局部中使用

仅作了解

global

x = 1


def f1():
    global x  # 声明x为全局的x
    x = 3


f1()
print(x)

nonlocal

def f1():
    x = 1
    def f2():
        nonlocal x  # 针对嵌套函数局部之间的修改
        x = 3
    f2()
    print(x)


f1()

建议使用

lt = [1,2,3]  # 作用域关系仅适用不可变数据类型,不适用于可变数据类型

def f1():
    lt.append(4)

f1()

print(lt)
dic = dict()

def login():
    dic['name'] = 'nick'
login()

def shopping():
    if dic.get('name'):
        print('购物成功')
    else:
        print('请登录')
shopping()