Python-名称空间与加载顺序-Python自学笔记1

Python函数------名称空间与加载顺序

名称空间(namespace)

在python中名称空间是记录变量名称到实际对象的一个映射,是以python字典的实现的。

python 名称空间共分四种

  • 分别是
    • 内置名称空间 ------ build-in namespace
    • 全局名称空间 ------ global namespace
    • 非局部名称空间 ------nonlocal namespace
    • 局部名称空间 ------ local namespace

内置名称空间

  • 内置名称空间:也就是存放python内置方法的空间,如 print input for while 这类内置方法的存放空间。
  • 因为有内置名称空间的存在,所以我们可以在什么方法都没有定义的python文件里使用print input 而不报错,因为这些内置方法都已经加载到了内置名称空间中,所以我们直接调用即可。

全局名称空间

  1. 看下面这段代码 看python的执行顺序

    a = 1
    b = 2
    def func():
        print("hello")
    c = 3
    
    • 执行顺序如下
    • a : 1 b : 2 变量 a 引用 1 , 变量 b 引用 2。
    • 执行到 def func 方法 并不加载该函数,只是将该函数的内存地址对应关系加载到内存全局名称空间
  • image-20210324215511453

看上图 程序开始从上往下执行, 将全局变量的引用以及映射关系全部记录至全局名称空间。

当执行到函数的时候,全局名称空间只是记录了这个函数的内存地址,至于函数里面有什么东西全局名称空间并不关心

程序继续往下执行

直至程序运行完成,全局空间也随之销毁

非局部名称空间

  • 非局部名称空间里面记录的是非全局也非局部的对象映射关系,一般是用来记录嵌套函数中外层函数的变量。(了解,函数嵌套后面会提到)

局部名称空间

  • 局部名称空间也叫临时名称空间,在程序执行过程中,遇到函数调用,python会开辟一个临时名称空间用于存放函数运行过程中产生的局部变量引用和映射关系,并且会在函数结束时销毁临时名称空间。

  • image-20210324221021934
  • 临时名称空间里面存放的引用与映射关系只在函数内部生效,这就是为什么在函数内可以定义与全局变量同名变量名的原因,函数结束时临时名称空间也会随之销毁。

四个名称空间的加载顺序与取值顺序

  1. 加载顺序:

    • 执行一个python程序的时候,
    • 加载顺序是 :
    • 内置名称空间全局名称空间非局部名称空间(在调用嵌套函数时)局部名称空间(函数执行时)
  2. 取值顺序:

    • 在python程序运行时,是按照就进原则来进行取值的,也就是说python的取值顺序是局部名称空间(在调用函数时)非局部名称空间(在调用嵌套函数时)全局名称空间内置名称空间 什么是就近原则请看下方实例:

    # 这个变量的引用关系存放在全局名称空间
    c = 1
    
    def func1():
        # 这个变量的引用关系存放在局部名称空间
        c = 3
        print(c)
        
        
    def func2():
        print(c)
        
        
    func1()
    func2()
    

    执行结果:

    • func1() >>> 3

    • func2() >>> 1

结果剖析:
  • 因为func1这个函数的局部名称空间里存在了一个名称为c 的变量,所以本着就近原则取值优先从函数内部的临时名称空间寻找有没有c 这个变量名称,如果有直接取值,如果没有再去全局名称空间寻找。

    • 执行func2 后python首先会在func2的临时名称空间里寻找有无变量名称为c 的变量,结果发现没有于是就跑到全局名称空间寻找,结果找到了,于是打印结果是1
    总结:
    • 如果函数在执行的过程中在局部名称空间寻找不到需要的变量名称,就会跑到全局名称空间中去寻找,如果全局名称空间也没有就会跑到内置名称空间去寻找,如果还是没有找到,那么Python就会报错。

本章总结

  • 名称空间共分四种:

  • 内置名称空间

    • 创建:内置名称空间在解释器开始工作即创建
    • 作用:存放python内置函数、方法等
    • 销毁:内置名称空间会随着解释器关闭而跟着销毁
  • 全局名称空间

    • 创建:python程序开始执行创建全局名称空间
    • 作用:存放整个python程序(除函数内部)的变量引用与对象映射关系。
    • 销毁:在整个Python程序执行完成后全局名称空间也会随之销毁。
  • 非局部名称空间

    • 创建:在调用嵌套函数时创建
    • 作用:存放外层函数的实际对象与值的映射关系
    • 销毁:(这个我没查到资料,如有有知道的网友麻烦告诉我一下)
  • 局部名称空间

    • 创建:在函数被调用时python会单独开辟一个临时名称空间

    • 作用:存放函数内部的变量引用与对象映射关系。

    • 销毁:临时名称空间会随着函数执行完毕而销毁

posted @   假文艺青年。  阅读(131)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示