欢迎大家来到IT世界,在知识的湖畔探索吧!
前面我们在配置Python解释器和Python虚拟环境的过程中都已经运行了一些Python代码,但是在正式介绍Python语法前,我还想介绍Python程序的结构。
我希望大家能够明白两个东西:Python代码怎么执行的?Python脚本程序的入口在哪里?
如果你已经明白了这两点,可以跳过这一篇文章。
Python代码是怎么执行的?
Python 执行流程
欢迎大家来到IT世界,在知识的湖畔探索吧!
解释器解析与编译
当你运行一个 .py文件时,Python 解释器(如最常见的 CPython)首先会接手工作,它的任务是把你的代码翻译成更低级的形式。
- 词法分析 (Lexical Analysis):解释器会像扫描仪一样读取你的源代码,把它拆分成一个个最小的、有意义的单元,叫做 标记 (Token)。比如,关键字 if、变量名 x、运算符 +、括号 ()都会被识别为独立的标记。
- 语法分析 (Syntax Analysis):解释器会检查这些标记的排列是否符合 Python 的语法规则。就像检查一句话的语法是否正确。这个过程会生成一棵 抽象语法树 (Abstract Syntax Tree, AST),这棵树清晰地表示了代码的结构和层次关系。
- 编译成字节码 (Compilation to Bytecode):AST 会被进一步编译成 字节码 (Bytecode)。字节码是一种平台无关的、低级的指令集,可以理解为是 Python 虚拟机的“机器语言”。它比源代码更接近机器码,但又不是直接能被 CPU 执行的机器码。这些字节码通常会被缓存到 __pycache__目录下的 .pyc文件中,这样下次运行同一程序时如果源码未改动,就可以直接加载字节码,跳过编译步骤,提高启动速度。
Python 虚拟机 (PVM) 执行字节码
生成字节码后,就轮到 Python 虚拟机 (Python Virtual Machine, PVM) 上场了。PVM 是 Python 解释器的核心组件,它是一个基于堆栈的虚拟机。
- PVM 会逐条读取并解释字节码指令。
- 它负责将这些指令翻译成当前操作系统和硬件能够理解的底层机器指令,并调用相应的资源执行。
- 程序运行时的内存管理(如分配和回收)、作用域、函数调用栈等也都由 PVM 负责。
与操作系统交互
PVM 本身并不直接操作硬件或处理文件、网络等任务。当需要执行这些操作时(例如使用 print()输出、用 open()读写文件、通过 socket进行网络通信),Python 会通过其标准库和运行时环境调用操作系统的接口 (API)。
- 例如,当你执行 print(“Hello”)时,最终的“在屏幕上显示文字”这个动作,是由操作系统来完成的。
- Python 提供了丰富的标准库(如 os, sys, subprocess)来简化这些交互操作。
- 最终输出执行结果。
Python程序的入口
如果你有C/C++代码的基础,你就会知道我们一般写代码的时候,有一个入口函数 :main函数。但是在Python中有main函数吗?
答案是有的,
Python 脚本默认从第一行开始顺序执行,但通过if __name__ == ‘__main__’:可以控制代码在直接运行和被导入时的不同行为,这被认为是 Python 程序的主入口约定。我们举例说明没有定义入口和定义入口以后Python代码执行顺序。
- 没有定义入口
print("1") # 没有定义入口,那么Python代码从这里向下开始执行 # 定义其他函数、类... print("2")
欢迎大家来到IT世界,在知识的湖畔探索吧!
- 定义了入口
欢迎大家来到IT世界,在知识的湖畔探索吧!def main(): # 你的主要程序逻辑在这里 print("2") # 可以调用其他函数、类等 # 定义其他函数、类... if __name__ == '__main__': print("1") # 定义了入口,Python代码先从这里开始执行 main() # 只有当此文件被直接运行时,main() 函数才会被调用
上面的代码执行结果是一样,先打印出数字 1,再打印出数字2。
Python 不强制要求必须有 if __name__ == ‘__main__’:,但没有它,被导入时模块的所有顶层代码都会执行,容易引起意外。因此,建议使用Python开发都是用自定义入口的方式,为Python代码创建一个合理且便于阅读的程序结构。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/145762.html