/* 看板娘 */ /* 粒子吸附*/

名称空间

  • 名称空间

    • 什么是名称空间

      • namespaces名称空间: 用于存放变量名与变量值绑定关系的地方(类似于民政局)

    • 名称空间的分类

      • 内置名称空间:存放内置的名字(python解释器提前定义好的 )

        • 生命周期:python解释器启动则产生,关闭则销毁

      • 全局名称空间:在py文件中顶格编写的代码运行之后都会存入全局名称空间

        • 生命周期:运行python文件时则产生,python文件运行完毕则销毁

      • 局部名称空间:函数体代码运行之后产生的都是局部名称空间

        • 生命周期:调用函数则产生,函数调用完毕则销毁

 

 

# 内置名称空间:
input
<built-in function input>  # built-in:内置

# 全局名称空间:
x = 10  # 变量名X
y = 20  # 变量名y
f 1 > 0:
    z = 30
    
with open('a.txt', mode='wt') as f:
    a = 333
    
while True:
    c = 444
# 以上都是属于顶格的


# 局部名称空间:
x = 10  # 全局名称空间
def foo(m):  # 全局名称空间
    m = 111  # 调用函数时,才会执行函数代码,名字m和n都存放于该函数的局部名称空间中
    n = 222  # 函数内
    
foo(111)  # 调用产生函数名称空间

名称空间的加载顺序是:内置名称空间--->全局名称空间--->局部名称空间

名称空间的查找顺序:

查找一个名字,必须从三个名称空间之一找到,要先确定自己当前在哪,基于当前所在的位置向外查找

如果当前你在局部查找,查找顺序为:局部名称空间--->全局名称空间--->内置名称空间

如果当前你在全局查找,查找顺序为:全局名称空间--->内置名称空间

    

len = 10  # 全局名称空间

def func():  # 函数
    len = 20
    # print(len)  # 站在局部查找,找到的是20
    
func()  # 调用产生局部名称空间

print(len)  # 站在全局找,全局有找全局,全局没有找内置


# 局部名称空间的嵌套 
'''函数在定义阶段名字的查找顺序就已经固定死了(特例)'''
x = 111
def f1():
    x = 222
    def f2():
        x = 333
        def f3():
            x = 444
            def f4():
                x = 555
                print(x)
                # x = 555  特例
            f4()
        f3()
    f2()
# 通过调用f1 执行所有的函数
f1()

 

posted @ 2021-11-15 21:57  红绿灯的黄呀  阅读(50)  评论(0)    收藏  举报