如何理解Python是一门解释型语言

May 14, 2018, 10:23 p.m.

不知道你们有没有发现经常会有个 __pycache__ 的目录,然后里面还有一些 .pyc 结尾的文件,不是说Python是一门解释型语言吗?

回家后,我从书架上找到了一本《编译原理——习题与解析》的书,看到了和程序翻译相关的概念,如下

两种方式

程序的翻译通常有两种方式:

  • 一种是“编译”方式
  • 另一种是“解释”方式

重点看一下和解释方式相关的介绍

  • 在解释方式下,源程序的执行只有一个阶段——解释执行阶段
  • 在解释方式下,并不生成目标代码,而是直接执行源程序本身,这是编译方式与解释方式的根本区别

书中的这段话,就是我记忆中的解释方式的原理啊,为什么还会有那些.pyc文件啊,继续往下翻:

  • 随着解释方式的不断发展,解释程序逐渐发展成3种类型:
    • 1.直接解释程序
    • 2.先把源程序转换成高级中间代码(与源程序相当接近),然后再解释执行该中间代码
    • 3.先把源程序转换成低级中间代码(与机器语言十分接近),然后再解释执行该中间代码

这下清楚了,原来那些.pyc文件是中间代码,虽然发展出了3种方式,但它们都不生成目标代码

发展出这些方式的原因是:

  • 在解释方式下执行源程序,易于查错,并可以在程序执行中修改程序,但和编译方式相比,执行效率太低
  • 将编译方式和解释方式二者相结合,可得到快速、灵活的集成开发环境

探究一下.pyc文件

  • 对应到上面书中的介绍,.pyc中属于低级中间代码,这个打开看一下就可以得知,是一个字节码文件
  • 并不是所有的.py文件都会生成.pyc文件,只有被当做模块调用的时候才会自动生成.pyc文件
  • 如果.pyc文件存在会优先读取.pyc文件,如果.pyc文件和.py文件的修改时间不一样,会读取.py文件并重新生成.pyc文件
  • .pyc文件可以跨平台部署,如果有保护源程序的需要,可以只提供.pyc文件
  • 如何主动地生成.pyc文件?
import compileall
compileall.compile_dir('/Users/lizhaochao/Desktop/')  
# 1. 只需2行代码
# 2. 批量生成, 填写项目所在目录
# 3. 能扫描到子目录中的.py文件, 其.pyc文件在该子目录下
# 4. 不同目录下的.pyc文件都保存在相应的__pycache__目录中

运行环境

  • Python:3.6
  • 个人计算机:iMac
  • 处理器:2.9GHz 四核
  • 内存:8GB
  • software:Jupyter

返回首页