工作模式
IDLE是Python自带的一个集成开发环境,这类工具会让程序编写更加轻松。可以在终端输入idle 指令打开它。
IDLE提供了交互模式和脚本模式两种工作模式。
交互模式
打开IDLE,显示的就是交互式界面。在>>> 之后输入Python语句然后按下回车键,就会显示执行的结果。
对于算术表达式12 + 6 ,Python打印了运算结果18 。
对于输出语句print("hello world") ,Python打印了语句hello world 。
第三句代码通过赋值语句创建language 变量并为其赋值为Python 。
输入复合语句时,前面的>>> 会变成... 作为延续行提示符,IDLE没有显示这个符号,但不要自己添加。想退出这个代码块,需要按下两次回车键。
在终端输入python 指令同样可以进入交互式环境。
脚本模式
交互模式可以让用户得到实时反馈,但无法保存结果以便之后再去执行。IDLE提供了脚本模式,可以用来编写和保存代码。
在交互模式菜单窗口通过File -> New File 新建一个脚本窗口。输入所有要执行的代码。
print("1 + 1")
print("hello world")
通过File -> Save As 将文件保存到指定位置,起名为helloWorld.py 文件,文件名以.py 为扩展名。
依次点击Run -> Run Module 即可运行这个程序,运行结果会在交互模式窗口显示。
在终端输入python [文件名] 也可以运行Python脚本程序。
交互模式适合做即时验证,脚本模式适合编写需要今后运行的程序。灵活运用这两种工作模式可以提高编程效率。
程序执行
当Python运行脚本处理代码之前,Python还执行了一些步骤:先将文件编译成字节码,然后转发到虚拟机中。
字节码编译
执行程序时,Python会先将源代码编译成字节码的形式。字节码是与平台无关的Python虚拟机指令,它不是机器的二进制代码,而是特定于Python的一种表现形式。字节码的运行速度会比源代码语句快得多。
编写模块hello.py ,并在helloWorld.py 中导入它。运行程序后,路径下多出了__pycache__ 子目录,该目录中包含了hello.pyc 文件,该文件的命名包含了模块名和编译它的Python版本信息。这种命名规范确保了不同版本Python生成的字节码不会相互覆盖。
--- hello.py ---
def hello(name):
print(f"hello, {name}")
--- helloWorld.py ---
from hello import hello
hello('Python')
通过python -m py_compile [文件名] 指令可以将单个Python文件编译成字节码。
Python保存字节码是对启动速度的优化。每当运行程序时,Python会自动检查源文件与字节码文件最后一次修改的时间戳,同时检查是否使用了不同的Python版本。如果上次保存字节码之后没有修改过源代码,那么Python将会跳过编译步骤并加载对应的.pyc 文件。Python的版本信息在3.2版本之前存储在字节码文件中,在3.2版本之后存储在字节码文件名中。
Python源文件的修改和版本的变化都会触发新的字节码文件的编译。字节码文件只会针对被导入的文件生成,是对导入的优化。在交互式命令行中输入的命令不会生成字节码。字节码会在内存中生成,并在程序结束时被丢弃。
Python虚拟机
程序编译成字节码后,会发送到Python虚拟机程序(PVM)上执行。PVM本质上是迭代运行字节码指令的循环,依次完成各操作指令。PVM是Python运行时的引擎,是实际运行脚本的组件。
Python的传统运行时执行模型是将输入的源代码转换为字节码,然后发送到PVM中运行。PVM仍需解释字节码,字节码指令比CPU指令需要更多的工作。但与其他经典解释器不同,Python并不需要反复地分析和分解每一行源代码语言的文本。因此纯Python代码的运行速度介于传统的编译语言和解释语言之间。
本文参考:《Python学习手册》《Python编程初学者指南》
|