003 Python 解释器

简介: 这篇文章主要讲一下有关 Python 解释器的内容。

v2-9192ac16b20e806649ec388b060300eb_1440w.jpg

这篇文章主要讲一下有关 Python 解释器的内容。


如果你暂时对 Python 解释没有兴趣,可以跳过这篇文章。跳过此文章对阅读后面的内容没有影响。


一、机器语言



在说 Python 的解释器之前,必须先说一下机器语言。


我们人类之间通过语言进行交流,咱们中国人之间相互说中文,相互能理解,因为我们听得懂中文,能理解中文。


英国人之间相互说英语,也能相互理解,因为他们都能听懂英文。


那计算机听得懂什么呢?我们把计算机能听得懂的语言称为「机器语言」。

机器语言不是中文,也不是英语,所以你给计算机说中文,说英文,它是听不懂的。想要计算机能理解你的意思,就必须给它说它能理解的「机器语言」。


二、解释器解释什么



我们写的代码(源文件),称为高级语言,人类能够理解,但是机器不能。


想要机器能理解我们的语言,就需要一个翻译者,来将「高级语言」翻译成「机器语言」。解释器就承担了这一样一个翻译者的角色。


本质上 Python 是一门先编译,再解释的语言。这里的编译和解释都是翻译,说的通俗一点就是把一种语言变成另一种语言。


编译:把我们写的源代码变成字节码(ByteCode)

解释:将解释后的字节码翻译成机器码(MachineCode)


image.png


也就是说 Python 解释器 = 编译器 + 虚拟机

编译器:将 Python 代码编译成 ByteCode

虚拟机:将 ByteCode 解释成机器码

因此 Python 被称为解释型语言并不是因为解释运行 Python 代码,而是解释运行 ByteCode。


三、pyc 文件



我们写的代码文件以 .py 结尾,你以后还会发现 .pyc 结尾的文件,这就是编译的结果。


假设我们现在有一个 Python 代码文件 code.py


  • 我们直接运行 python code.py 并不会生成 code.pyc 文件。
  • 如果这个代码中引入了别的模块,如 urllib,那么 python 会为 urllib.py 保存编译生成的字节码文件,生成 urllib.pyc
  • 我就是想要生成一个 code.pyc 文件可以吗? 当然可以,使用命令 python -m py_compile code.py 就会生成 code.pyc 文件。


在加载模块的时候,如果同时存在 .py.pyc 文件,python 会比较 .pyc 的编译时间和 .py 的最后修改时间。


如果 .pyc 的编译时间更晚,那么 python 就会使用 .pyc 文件。否则 python 会重新编译 .py 文件并更新 .pyc 文件。


小知识点
  • 命令 python -m py_compile code.py ,因为安装的是 python3 的版本,所以如果执行命令报错,可以尝试python3 -m py_compile code.py
  • -m 的含义以导入模块(module)


四、常见的 Python 解释器



  • Cpython

这是最常见,也是最常用的 python 解释器。

当我们从官网下载安装好了 Python 之后,就会默认安装 CPython 解释器,这是官方在维护的解释器。因为这个解释器是用 C 语言开发的,所以叫 CPython。

上节课中的与 Python 交互中,默认使用的就是 CPython。


  • IPython

IPython 是基于 CPython 写的一个增强型交互式解释器。也是说,IPython 仅仅是在交互体验上进行了增强,从执行代码功能的角度而言,与 CPython 是完全一样的。


  • PyPy

PyPy 是 Python 的另一个比较出名的解释器,它看中的是执行速度。使用 JIT 技术,对 Python 代码进行动态编译,能够显著的提高 Python 代码的执行速度。

需要特别注意的是,不是所有能在 CPython 下运行的代码都能够在 PyPy 下运行「虽然绝大部分都是可以的」,会出现同样的代码跑出不同结果的现象。


  • Jython

Jython 是运行在 Java 平台上的 Python 解释器,能够直接把 Python 代码编译成 Java 字节码(ByteCode) 进行执行。


  • IronPython

IronPython 是运行在微软 .Net 平台上的解释器,可以把 Python 代码编译成 .Net 字节码。


五、总结



这篇文章主要讲解了有关 Python 解释器的内容。Python 是一门先编译,再解释的语言。


Python 的解释器实际上承担了 编译+ 解释的功能。

Python 有多种解释器,最常用的还是 CPython 解释器,这是用 C 语言编写的,官方维护的解释器

目录
相关文章
|
6月前
|
Rust 自然语言处理 前端开发
Python潮流周刊#8:Python 3.13 计划将解释器提速 50%!
Python潮流周刊#8:Python 3.13 计划将解释器提速 50%!
78 2
|
6月前
|
存储 设计模式 Java
深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!
深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!
88 2
|
6月前
|
JavaScript 前端开发 Java
11 个最佳的 Python 编译器和解释器
11 个最佳的 Python 编译器和解释器
394 1
|
6月前
|
前端开发 JavaScript Shell
如何免安装使用 Python?推荐 17 个在线的 Python 解释器!
如何免安装使用 Python?推荐 17 个在线的 Python 解释器!
103 0
|
6月前
|
Python Windows
win64系统安装32位的python解释器和打包成exe程序
本文说明了在win64系统环境下,如何安装32位的python解释器,同时对32位虚拟环境下运行的python程序进行打包,将其打包成可执行的exe程序,以图文相结合的方式记录了操作步骤,供大家参考。
450 0
|
5月前
|
开发框架 并行计算 安全
Python的GIL限制了CPython在多核下的并行计算,但通过替代解释器(如Jython, IronPython, PyPy)和多进程、异步IO可规避
【6月更文挑战第26天】Python的GIL限制了CPython在多核下的并行计算,但通过替代解释器(如Jython, IronPython, PyPy)和多进程、异步IO可规避。Numba、Cython等工具编译优化代码,未来社区可能探索更高级的并发解决方案。尽管GIL仍存在,现有策略已能有效提升并发性能。
68 3
|
5月前
|
安全 Java Python
GIL是Python解释器的锁,确保单个进程中字节码执行的串行化,以保护内存管理,但限制了多线程并行性。
【6月更文挑战第20天】GIL是Python解释器的锁,确保单个进程中字节码执行的串行化,以保护内存管理,但限制了多线程并行性。线程池通过预创建线程池来管理资源,减少线程创建销毁开销,提高效率。示例展示了如何使用Python实现一个简单的线程池,用于执行多个耗时任务。
45 6
|
4月前
|
Python
`cmd`模块是Python标准库中的一个模块,它提供了一个简单的框架来创建命令行解释器。
`cmd`模块是Python标准库中的一个模块,它提供了一个简单的框架来创建命令行解释器。
|
4月前
|
IDE 开发工具 Python
【Python】已解决:pip安装第三方模块(库)与PyCharm中不同步的问题(PyCharm添加本地python解释器)
【Python】已解决:pip安装第三方模块(库)与PyCharm中不同步的问题(PyCharm添加本地python解释器)
674 0
|
5月前
|
C语言 Python
Python解释器(1)
【6月更文挑战第1天】Python解释器(1)。
60 8