前言

今天这个前言我们不说那么多虚的了,直接开始吐槽,Python大家肯定都用熟了,但是Python最大的弱点,相信大家也有都知道,那就是:速度慢!速度慢!速度慢!(重要的事情说三遍)Python的速度实在是太慢了,在一些需要速度的场合,比如数据分析和处理方面,Python虽然占很大的优势,比那复杂又臃肿的C++不知道好多少,但是速度也是一个硬伤啊,所以,Python在算法方面至今难望C++项背,唉~

当然,今天这篇文章可不是拿来倒苦水的,打住打住!接下来,我要隆重推出今天的主角:PyPy!

PyPy是什么?

说出来你可能不信,PyPy是用Python写的一个Python解释器,是的,我没说错,你也没有听错,再重复一遍,PyPy是用Python写的一个Python解释器(舌头差点打结)。你肯定会大吃一惊:还能用Python自己写自己的解释器?!那是当然,这就是高级语言的一个特性:自举。自举是什么?简单来说,就是像PyPy这样,用自己写自己的编译器/解释器。不用惊讶,我们现在用的GCC这个很好用的C/C++编译器就是用C自己写的。听到这里,你又会疑惑不解:我听说过,Python是用C写的,所以也称为CPython,因为是解释型语言,所以速度慢,Python本身速度都这么慢了,还用它写自己的解释器,那不得慢上天了?是的,第一次听说PyPy的时候我也有这个疑惑,但是事实是:PyPy速度比CPython快好几倍!!!

为什么那么快?

因为PyPy用了一个高端技术:JIT。不要被这高级的名字吓到,其实JIT就是Just In Time的缩写,中文是即时编译。大家不用理解的过多,因为往深了讲这就是一大本编译器原理 + 一大本解释器原理 + 一大本解释器优化,非常之复杂。我们可以简单理解:

C之所以快,是因为C是静态语言,编译成了二进制机器码运行,Python之所以慢,是因为它是动态语言,直接解释运行,而PyPy,就是在Python动态运行的同时,将Python的部分代码编译成机器码,速度当然比直接解释运行的Python快啦。

当然,PyPy将Python即时编译为机器码,也不是没有坏处,PyPy不是静态编译,而是动态运行的同时收集信息,然后动态编译,这样的话,可能一些单纯的数据处理速度很快,但是一些复杂的场景,需要收集大量信息,而且很难优化,这样速度就会比CPython慢很多,所以需要斟酌使用。

下载和安装

我们进入PyPy下载界面,然后选择适合自己系统和CPU的版本下载,这里建议下载比较通用的PyPy3.9或者PyPy3.7。下载好之后是一个压缩包,并不是常见的安装包程序,我们只需要将压缩包解压到一个目录下,就完成了安装。我们进入PyPy的目录,输入以下指令:

1
pypy.exe --version

这个时候,会输出pypy的版本,这样就成功了。对于安装环境比较熟悉的朋友会说:我们可以把PyPy添加到环境变量里面,这样我们不用每次都进入PyPy的目录下了。至此,我们的PyPy就算是安装成功了,我们可以写一个HelloWorld测试一下。

PyPy上的第一个程序

我们打开main.py,输入熟悉的一行程序print("Hello World"),再将main.py放到PyPy目录下,然后进入PyPy目录下,运行

1
pypy.exe main.py

这时候,它会成功的输出Hello World,这就代表,PyPy已经成功安装并运行了。

总结

这篇文章,我带大家初步了解了PyPy,下载了PyPy并使用PyPy运行了第一个程序,以后的文章我会带大家深入研究PyPy,了解它的运行原理和机制,还会使用PyPy开发一些高性能的程序,敬请期待!