Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0220
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在:
个人网站: `https://oeasy.org`
蓝桥云课: `https://www.lanqiao.cn/courses/3584`
GitHub: `https://github.com/overmind1980/oeasy-python-tutorial`
Gitee: `https://gitee.com/overmind1980/oeasypython`
---- 上次研究了python类库的来源
- 系统内置
- 类库目录
- 把py程序放到python类库列表中
- py程序就成一个类库包
- 可以直接运行此程序
- 也可以作为类库导入次程序
- py程序就成一个类库包
- 那我怎么知道 当前的py文件
- 是 引入的模块
- 还是 主控的程序 呢🤔
print("in oeasy.py __name__ is ",__name__)
- 输出 当前 上下文的
__name__
- oeasy作为主程序的时候
__name__变量的值是__main__- 注意这里是两个下划线
- 如果oeasy作为一个被引入的模块呢?
- oeasy作为一个被引入的模块时
__name__变量的值是oeasy- 而不是
__main__
- 什么是
__name__呢?
- 观察
__name__和__doc__、__builtins__一样- 是全局变量
- 通过
__name__这个变量的值- 可以知道当前py文件
- 是不是主模块(或者说入口模块)
- 或者说是顶级代码环境
- 如何理解这个顶级呢?
- 以下两种运行方式中
- oeasy.py就是顶级模块
python3 -m oeasy
python3 oeasy.py
- 顶级的就是说这个模块
- 是我们用python直接运行的
- 别的都是运行过程中
- 直接或者间接被顶级模块调用的模块
- 判断
__name__属性是否为__main__
python3 o2z.py
- 如果结果True
- 就是顶级代码级别
- 就是要直接运行当前文件
- 就执行
if __name__ == '__main__'中的代码
- 如果结果False
- 就不是顶级代码级别
- 就是要把当前文件作为模块导入
- 就不执行
if __name__ == '__main__'中的代码
- 在上述命令中
- 由于导入了 oeasy.py
- 在运行 oeasy.py时
__name__就是 oeasy- 而不是
__main__ - oeasy.py 就不是 顶级模块
- top-level module
- 如果模块名是个文件夹会如何呢?
- 可以自制模块
__main__.py就是模块的入口地址
__main__可以是具体的py文件
__main__.py就是模块的入口地址- 这个和
__init__.py有什么不同呢? - 对于文件夹来说
- 先初始化
__init__.py - 然后运行
__main__.py
- 先初始化
- 如果导入这个模块
- 初始化
__init__.py - 不运行
__main__.py
- 初始化
- 再看个例子例程
- calendar 作为主模块 运行的时候
- 出现日历
- 作为 被导入模块的时候
- 没有任何输出
vi /usr/lib/python3.8/calendar.py
- G
- 切换到结尾
- 观察到相关条件语句
- 只有主函数的时候
- 才会调用 main(sys.argv)
- 作为模块被导入时
- 不会调用main(sys.argv)
if __name__ == "__main__":
- 这句if判断是否为 top-level
- 目的是为了保护下面的代码
- protection
main(sys.argv)
- 通过判断
__main__=="__name__"- 有些代码是只有顶级的时候才执行的
- 作为导入模块不需要执行这些代码
- 比如图中的sys.exit
- 这个sys.exit是什么意思呢?
- 退出当前的程序
- 接受一个数字作为整个程序的返回值
- 这个sys.exit到底返回了什么?
- 我们这次了解了python文件引用的层级关系
- 最高级的模块的
__name__是__main__ - 可以根据这个进行模块是否为顶级的判断
- 最高级的模块的
- 自制模块文件夹
__main__.py就是模块主程序的入口地址
-
- sys.exit函数
- 可以直接跳出当前python执行的进程
- 并返回一个数值
- sys.exit函数
- sys.exit到底怎么用呢?🤔
- 我们下次再说👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。














