名称空间和作用域

名称空间相关:

1.名称空间Namespaces:指的是存放名字和值的内存地址绑定关系的的地方(内存空间)

2.名称空间可以被分为三大类:

  内置名称空间:存放Python解释器自带的名字

    产生:Python解释器启动的时候则产生

    销毁:Python解释器结束运行销毁

  全局名称空间:在文件内定格定义的变量和函数名(包含流程控制和定格定定义的函数名)

    产生:执行Python程序时产生

    销毁:Python程序执行完成时结束

  局部名称空间:函数内部定义的名字的空间

    产生:调用函数时产生

    销毁:函数调用结束时结束

三种名称空间的产生的先后顺序:内置名称空间---》全局名称空间---》局部名称空间

查找名字的顺序:当前顺序往外一层层的寻找

  如果当前在局部空间:局部--》全局--》内置

  如果在全局名称空间:全局--》内置

x=0#全局
def f1():
    # x=1#f1局部名称
    def f2():
        # x=2#f1下的f2局部名称空间
        def f3():
            # x=3#f1下的f2下f3的局部内存空间
            print(x)
        f3()
    f2()
f1()

作用域:指的是作用的范围

  全局作用域:包含内置与全局名称空间的名称

    特点:全局存活,全局有效

  局部作用域:包含局部名称空间的名字

    特点:临时存活,局部有效

重点:

  作用域关系是在函数定义阶段就已经固定死了,与调用位置无关。

范例一:

def f1():
    print(xxx)#定义函数处开始寻找,再一层一层向外查找
xxx=111

def f2():
    xxx=222
    f1()#与调用的位置无关
f2()
#111

范例二:

xxx=111
def f1():
    print(xxx)
    # xxx=222#当要调用同级名称,先定义在使用,这样会报错
    yyy=222
    print(yyy)

f1()
原文地址:https://www.cnblogs.com/msj513/p/9707458.html