Python解释器有很多种类型,它们用不同的编程语言写成;Python还有很多变种,可以用于原本不适用于解释型语言编程场景,当然,此时Python已经没有所谓的解释器而只是神似(语法一样)而已。
这里列出几种常见的Python变种,让大家对Python的变种有一个初步的了解。更详细全面的Python变种请移步这里。
最早Python被吉多·范罗苏姆发明出来时并没有这么多复杂的东西(各种各样的解释器类型),最早的Python解释器是用C写的,而这个解释器后来被纳入到Python软件基金会(PSF)的管辖,就叫做了CPython。当我们从Python官方网站下载并安装好Python3后,我们就获得了一个CPython,CPython是使用最广的Python解释器。
Mac和Linux上自带的Python解释器也是CPython。
CPython由于出现最早,而且是官方版本加上对于C/Python API的全面支持,让它有了极为广大的第三方包支持。然而CPython有几个缺陷,其中的两个最被人诟病的是全局解释器锁(GIL)和无法使用即时编译技术(JIT)。
点此进入CPython官网(也是Python官网)。
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
点此进入Jython官网。
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
点此进入IronPython官网。
CPython的一个特点(说好处也行)就是有交互式模式,你可以直接在CMD中与Python解释器交互(就是写一段代码,然后运行,然后接着写,而不是一次性运行到底)。IPython发扬了这个优点。IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。就像很多国产浏览器虽然外观不同,但内核其实都是调用了IE。CPython使用“>>>”作为提示符,而IPython用“In + [序号] + :”作为提示符。
点此进入IPython官网。
针对CPython无法使用JIT技术的一个问题,PyPy应运而生,它对CPython的一些问题特别是JIT问题进行了改良,使得PyPy的执行效率相对CPython有了大幅度提升。但是,PyPy对Python的实现与CPython相比有了大幅度变动,使得它无法使用官方的C/Python API,而是使用自己定义的一套C接口,很多极其重要的第三方包无法直接使用,所以PyPy暂时还没有盛行。
点此进入PyPy官网。
另一个希望优化CPython速度问题给Python提速的解释器是Pyston。它同样解决了CPython无法使用JIT技术的问题。Pyston由Dropbox支持赞助,这个公司的雇员包括Python的创始人吉多·范罗苏姆。这个我了解不多,有需要可以去它的官网看看。
点此进入Pyston官网。
Python不能实现一些非常底层的操控,所以在硬件领域并不起眼,这是我们已经清楚的事实。Damien George是一名计算机工程师,他每天都要使用Python语言工作,同时也在做一些机器人项目。他在思考一个问题,能否用Python语言来控制单片机,进行实现对机器人的操控呢?Damien为了突破这种限制,他花费了六个月的时间来打造MicroPython。MicroPython基于ANSI C,语法跟Python3基本一致,拥有自家的解析器、编译器、虚拟机和类库等。
MicroPython,是跑在微控制器(MCU)上的Python,通过内置的解释器执行py文件或者py命令,就可以让微控制器运行想要的功能了。MicroPython和Python编程语言一样,在任何板子上都可以使用通用的API控制硬件底层,比如点亮 LED 灯,读取传感器信息, LCD 显示字符串、控制电机、连接网络、连接蓝牙等等。如果说Arduino让创客摆脱了各种编程环境配置,那么MicroPython直接让创客摆脱了底层。命令行和解释执行,都是C语言所不具备的优势,运行了MicroPython的芯片上系统(SOC),就类似一台完整的电脑,我们用Python文件和命令行,轻松控制这台电脑中的一切。
点此进入MicroPython官网。
现在的前端(即网站前台部分,运行在浏览器上展现给用户浏览的网页)上的程序部分几乎是JavaScript的天下,但是,Python也有在前端的尝试。它PyScript就是一例,它允许我们将 Python 代码嵌入到 HTML 中,并在浏览器中运行。
PySricpt的目标有,提供干净简单的 API,支持标准 HTML,扩展 HTML 以读取稳定且可靠的自定义组件,提供可插拔、可扩展的组件系统。PySricpt的特点有,在浏览器中使用Python语言编程;有完备的Python生态,可以自定义运行环境并使用各种Python流行的第三方包;可以与JavaScript对象和命名空间双向通信;有着灵活的组件和框架,它们都是现成的。
PyScript这个项目很新,虽然有了令人欣喜的特点,但是很多方面不成熟,比如引用第三方包以后运行速度感人等。我们想要应用它还得再等等。
点此进入PyScript官网。
前面的介绍其实是有些问题的,但是一来我自身已经习惯这么说了,二来这么说也挺好理解的。这里记录一下问题所在。
CPython之于Python的作用被误传了很多,准确的表述为CPython是Python的一种实现(implementation), 不是解释器 (interpreter)。其余的实现还有Jython、IronPython、PyPy等。
以下几个概念必须要清楚:
所以,拿CPython举例,它是有编译流程的,CPython会将Python代码先编译为字节码,然后由其运行时解释执行。所以Python的准确表述为动态语言,当然说其为解释性语言也可,因为针对标准实现CPython来讲,它是解释执行的,但不能一定确定Python没有进行编译。
我们学习Python都是从CPython开始的,因为它的使用最广,支持最全面。我们接下来讨论的Python版本和Python解释器都是针对CPython而言的。
Python的3.0版本(Python3),常被称为Python 3000,或简称Py3k。相对于 Python 的早期版本,这是一次较大的升级。为了不带入过多的累赘,Python3在设计的时候没有考虑向下相容。许多针对早期Python版本(Python2)设计的程序都无法在Python3上正常执行。除非执行环境无法安装Python3或者程序本身使用了不支持Python3的第三方库,一般Python程序都使用 Python3的语法。大多数第三方库都正在努力地兼容Python3,即使无法使用Python3,也建议编写相容 Python3的程序,然后使用Python2.6或Python2.7来执行。
Python3计划每年发布一个新的子版本,每次只增加两三种新语法。
自2.0以来的全部新变化太多太多了,我也不可能在这里把他们全部讲完,好在Python官方网站帮我们详细列举了这些变化并做成了系列内容,具体的所有变化请移步这里。这个系列内容会带您浏览Python大版本之间重要的变化。在新版发布后,如果您希望掌握最新变化,请务必阅读这些内容。如果您不想去阅读这些冗长的内容,您也可以看看这篇博客,它简单列举了Python3各版本间差异并提供了实例。
我们学习Python用的是CPython,所以我们去Python官网找到解释器并安装。Mac和Linux系统是自带Python3的,除非您需要更改解释器版本,一般您无需手动安装Python解释器。一般我们不使用最新版本的Python3解释器,因为解释器的更新总是快于第三方库,有的第三方库会来不及支持最新版本的Python3。Python官网有很多地方可以下载Python解释器,这里我简要列出几个。需要明确的是这些地方下载的是安装程序而不是解释器。
访问Python官网,你会看到以下画面。
将鼠标悬停在“Downloads”板块上,而后网页会弹出一个对话框,点击对话框的按钮即可下载到最新版本的Python解释器。
仍是访问Python官网,这次点击”Downloads“板块,你会跳转至另一个页面,向下滑动这个页面,你会看到“Looking for a specific release?”板块,其中可以让你选择Python版本。
找到你想要的Python版本,然后点击其后的“Download”链接,你就跳转到该版本的下载页面了,向下滑动,找到“Files”板块,然后点击“Windows installer (64-bit)”就可以开始下载了。
这里对“Windows embeddable package”做一个简要的说明。这个版本又称为嵌入式版(不是指硬件嵌入),绿色版。该版本就是一个zip压缩包,解压缩之后得到一个文件夹,该文件夹包含了一个最小Python运行环境(所谓最小,是指删去了很多功能,比如不包括idle、pip等)。该版本主要用途有,嵌入其他程序之中,给其它编程语言提供Python调用接口,与系统Python环境隔离,方便分发我们的脚本等。
第一步里有一个“Add Python 3.X to PATH”要勾选上,然后点击“Install Now”即可,暂时无需自定义安装。
点此返回笔记目录。