第二章

What it means to write and run a Python script depends on whether you look at these

tasks as a programmer, or as a Python interpreter.

程序员角度:

In its simplest form, a Python program is just a text file containing Python statements.

解释器视角:

1.将源代码编译成字节码(byte code)的形式。

字节码是源代码底层的、与平台无关的表现形式。byte code 比源代码速度快。

如果python进程在机器上有写的权限,则字节码会保存为一个以pyc为扩展名的文件

在python3.2之前,在程序运行后,你会在源代码同目录下看到对应的pyc文件。在python3.2之后,会存在与源代码同目录的__pycache__文件夹中,后缀名会显示出python的版本,例如 script.cpython-33.pyc。

python通过这种方式完成对启动速度的优化。只要你没更改过源文件且用与pyc同一版本的python运行,那么python将会导入pyc文件,跳过编译步骤。

  • 源文件:python会对比源文件和byte code的时间戳,不同则重新编译
  • 版本:版本不同也会重新编译

如果无法在机器中保存字节码,那么它会生成在内存中,并且当退出程序时字节码会被舍弃。字节码也可以分发python程序,因为即使没有源代码,在只有字节码的情况下依然可以运行。

但需要注意,只有文件导入的情况,字节码才保存。顶层文件只能用脚本运行。另外,交互提示模式下也不会保存字节码。

2.The Python Virtual Machine (PVM)

一旦程序被编译成字节码(或导入已有的pyc文件),字节码就会被输送到PVM去执行。


PVM不是一个单独的程序,不需要被单独安装。实际上,PVM是一个大的代码循环,它逐一执行字节码指令去实现它们的操作。PVM是python的运行引擎,它总是作为python系统的一部分出现,并且他是实际运行脚本的组件。技术上讲,它是Python解释器的最后一步。

这就造成python仍然需要PVM(不是CPU芯片)去解释字节码,字节码的指令集较CPU指令集需要更多的工作,从而导致比C等编译型语言慢,但python又不需要每次都重新分析每一条源代码,这导致其比纯解释型语言要快一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值