Python 运行机制
程序运行主要有两种机制:编译型和解释型。编译型是将代码(源文件)通过编译器,编译成机器码文件,当运行的时候直接执行机器码文件,例如C语言;解释型是将源文件通过解释器,逐行进行翻译并运行。
Python则属于解释型的语言。
编译型和解释型语言各有优缺点:
解释型:
缺点:执行速度比较慢
优点:可以跨平台(操作系统)
改动不需要整体重新编译,不可脱离解释器环境运行
编译型:
缺点:不能跨平台
优点:执行速度快
任何一个小改动都需要整体重新编译,可以脱离编译环境运行
Python 的运行原理可以概括为以下几个步骤:
- 词法分析和语法分析:Python 解释器会将源代码进行词法分析,将代码转换为一系列的 Token(即词法单元)。然后,Python 解释器会对 Token 进行语法分析,将代码转换为语法树。
- 字节码编译: Python 解释器会将语法树编译成字节码。字节码是一种类似于机器码的中间代码,它比源代码更加容易解释执行。
- 解释执行:最后,Python 解释器会逐行解释字节码为机器码,由CPU执行机器码。
python解释器是一个可执行文件(加动态库),可以由Python源码编译得到(使用make install),但是编译和安装 Python 解释器需要一些编译工具和库的支持,例如 gcc 编译器、make 工具、zlib 库、OpenSSL 库、Tkinter 库等。
字节码是一种中间形式,Python 程序不需要在每次执行时都重新编译,pyc的目的是重用,Python解释器认为只有import进来的模块,才是需要被重用的模块。pyc文件每次被载入时,都会检查它的最后修改日期(由PyCodeObject写入到pyc时会写入一个long型的日期),与py文件一致则直接使用,否则重新生成一份pyc文件。