关于 Python 的几个概念
在阅读关于 python 或是利用 python 开发的工具包文档时,有时候会遇到一些概念,这些写下来,理一理思路。
什么是 Python
与 C/C++ 类似也有些不同,python 是一种跨平台的、面向对象的、解释型的计算机程序设计语言。
什么是解释型语言
说 python 是解释型语言,是区别于 C/C++ 等需要编译的编程语言来说的。
如果要进行划分的话,可以将 C/C++ 归为编程型语言,而 Python 和 Java 可以被归为解释型语言,区别为:
对于 C/C++ 等编译型语言,从源码到可执行文件要经过:
- 预处理:预处理相当于根据预处理命令将源代码转换为新的 C 程序
- 编译:将得到的新的 C 程序翻译成汇编代码
- 汇编:将汇编文件翻译为机器指令,并打包成可重定位目标程序的文件
- 链接:将引用的其它文件加到汇编后的文件中,处理后得到最终的可执行文件
而对于 Python 等解释型语言,过程则为:
- 用户提交源码
- 解释器将之翻译为字节码,Python 中一般为 .pyc 文件,此时机器仍然不能执行
- 字节码交由虚拟机执行,由于字节码不依赖于操作系统,因此可以进行跨平台开发
这里的虚拟机并不是 vmware 这种虚拟机。实际上 Python 虚拟机实际上是在模拟操作中执行文件的过程。
Python 中的解释器
通常情况下,编写后的 Python 代码会以 .py 为扩展名的文本文件保存。而代码想运行,必须通过解释器执行,Python存在多种基于不同语言开发的解释器。每个解释器有不同的特点,但都能正常运行Python代码。
CPython
- 当从 Python 官网完成 Python 语言的下载和安装后,我们就获得了一个官方版本的解释器:CPython。
- 该解释器是由 C 语言进行开发的,因此该解释器就被称为 CPython。
- 此时运行 Python 就是使用的 CPython 解释器。
- CPython 是标准 Python,也是其他 Python 编译器的参考实现。
- 通常提到 “Python” 一词,都是指 CPython。
- 目前来说,CPython 是使用最广的 Python 解释器。
IPython
- IPython 是基于 CPython 之上的一个交互式解释器。
- IPython 只是在交互方式上有所增强,但是执行 Python 代码的功能和 CPython 是完全一样的。
- CPython 用
>>>
作为提示符,而 IPython 用In[num]:
作为提示符。
PyPy
- PyPy采用JIT技术,对Python代码进行动态编译
- 相对于CPython,PyPy的性能提升非常明显
- 但对第三方模块的支持不够。
Jython
- Jython 是在 JVM 上实现的 Python 解释器,由 Java 编写。
- Jython 将 Python 源码编译成 JVM 字节码,由 JVM 执行对应的字节码。
- 因此能与 JVM 进行集成
IronPython
- IronPython 和 Jython 类似
- 只不过 IronPython 是运行在微软 .Net 平台上的 Python 解释器
- 由 C# 编写
- 可以直接把 Python 代码编译成 .Net 的字节码。
- 能很好的与 .NET 平台集成
什么是 Python 发行版
python 其实不止简单地包含语法,其实广泛的 python 指的是与 python 相关的一个大型程序语言生态系统,其中还包含了满足不同编程需求的软件包。但是有时候为了运行和使用方便,也为了满足不同的使用需求,会选择不同的发行版本。
Python 发行版有点类似于 Linux 发行版的概念。对比 Linux 发行版来说,虽然各种 Linux 发行版有所差别,但是使用的内核却是相同的。而不同的 Python 发行版可以简单看作是对某部分工具进行集成或者进行了性能优化。
比较常用的几种 Python 发行版都有:
CPython
- CPython 属于 Python 参考实现方案,可以认为是所有其他 Python 衍生发行版的一个标准
- 作为标准,也因为其设计取向,其对没有对性能作出深度优化
- 但可以根据需求自行添加
Anaconda Python
- Anaconda 服务目标为需要由商业供应商提供支持且具备企业支持服务的 Python 开发者
- Anaconda 包含了商业和科学计算的常用库
- Anaconda 的桌面应用程序 Anaconda Navigator,能让用户通过 GUI 进行操作
- Anaconda 的 conda 软件包管理器能够根据外部软件要求安装 Python 以及第三方软件包
- 由于 Anaconda 当中包含大量实用性库,因此 Anaconda 的安装体积往往要比 CPython 大得多
- 如果必要,也可以安装精简版本的 Anaconda— Miniconda
ActivePython
- ActivePython 主要面向企业用户与数据科学家
- ActivePython 使用 Python 中的 pip 软件包管理器,但也以压缩包的形式提供数百套通用库
- 如果需要将现有项目升级至具有复杂依赖关系的较新版本的,则需要同时升级 ActivePython
PyPy
与 Python 解释器的对应内容类似
Jython
与 Python 解释器的对应内容类似
题外话
在 Python 解释器和发行版中出现了重复的内容,可以认为是发行版本中采用了对应的解释器。