Skip to content

Latest commit

 

History

History
133 lines (96 loc) · 3.65 KB

201-542737-是否为主模块_name_main.sy.md

File metadata and controls

133 lines (96 loc) · 3.65 KB
show version enable_checker
step
1.0
true

当前模块名(__name__=='__main__')

回忆

  • 上次研究了python类库的来源
    • 系统内置
    • 类库目录
    • 自定义的PYTHONPATH
  • 通过自定义的PYTHONPATH
    • 把一些自己指定的程序放到自己指定的位置
    • 甚至打成一个类库包
  • oeasy可以引用(import)o2z
  • o2z也可以引用(import)oeasy
  • 如何区分当前的py文件是
    • 引入的模块
    • 还是主控的程序呢🤔

构建程序

图片描述

  • oeasy作为主程序的时候
    • __name__变量的值是__main__
    • 注意这里是两个下划线
  • 如果oeasy作为一个被引入的模块呢?

图片描述

  • oeasy作为一个被引入的模块时
    • __name__变量的值是oeasy
    • 而不是__main__
  • 什么是__name__呢?

游乐场

  • 观察

图片描述

  • __name____doc____builtins__一样
  • 是全局变量

图片描述

  • 通过__name__这个变量的值
  • 我们可知道当前py文件是不是主模块(或者说入口模块)
  • 或者说是顶级代码环境
  • 如何理解这个顶级呢?

顶级代码环境

  • 顶级的就是说这个模块是我们用python直接运行的
    • 别的都是运行过程中
      • 直接或者间接被顶级模块调用的模块

图片描述

  • 判断__name__ 属性是否为 __main__
  • 如果结果True
    • 就是顶级代码级别
    • 就是要直接运行当前文件
    • 就执行 if __name__ == '__main__' 中的代码
  • 如果结果False
    • 就不是顶级代码级别
    • 就是要把当前文件作为模块导入
    • 就不执行 if __name__ == '__main__' 中的代码

图片描述

  • 如果模块名是个文件夹会如何呢?

自制模块文件夹

图片描述

  • 可以自制模块
    • __main__.py就是模块的入口地址
  • __main__可以是具体的py文件

动手

图片描述

  • __main__.py就是模块的入口地址
  • 这个和__init__.py有什么不同呢?
  • 对于文件夹来说
    • 先初始化__init__.py
    • 然后运行__main__.py
  • 如果导入这个模块
    • 初始化__init__.py
    • 不运行__main__.py
  • 再仔细看看例程

顶级

  • 通过判断__main__==__name__
    • 有些代码是只有顶级的时候才执行的
    • 作为导入模块不需要执行这些代码

图片描述

  • 比如图中的sys.exit
  • 这个sys.exit是什么意思呢?

sys.exit

  • 退出当前的程序
    • 接受一个数字作为整个程序的返回值

图片描述

  • 这个sys.exit到底返回了什么?

总结

  • 我们这次了解了python文件引用的层级关系
    • 最高级的模块的__name____main__
    • 可以根据这个进行模块是否为顶级的判断
  • 自制模块文件夹
    • __main__.py就是模块主程序的入口地址
    • sys.exit函数
      • 可以直接跳出当前python执行的进程
      • 并返回一个数值
  • sys.exit到底怎么用呢?🤔
  • 我们下次再说👋

图片描述