比Python快得吓人,PyPy极简入门,Python进阶必备

众所周知,Python非常强大,简单易学,又有很多轮子可以直接拿来用。

凡事有利必有弊,Python运行速度慢。如果你要做一些很耗时间的事情,就会头疼。

这时候也许会有人建议你用C,C++等编程语言。

天啊,他们是开玩笑吗?换C语言有那么容易吗!

不过现在福音来了,不用换编程语言,也可以把速度提高很多倍。

这就是我今天要介绍的PyPy!

1 做个实验

这是一段普通的Python代码,计算从0到1亿之间的整数之和:

import time
from termcolor import colored

start = time.time()
number = 0
for i in range(100000000):
    number += i
    
print(colored("FINISHED", "green"))
print(f"Ellapsed time: {time.time() - start} s")

用默认的Python解释器(CPython)运行,然后再用PyPy运行。

它们的运行时间对比大概是这样的:

在这里插入图片描述
当然,不同的机器运行可能会有少许差异,但是你可以看到非常明显的差异。

好吧,我就把这篇文章的目的明说了吧:

其实不需要马上用PyPy,但是你有必要知道它的存在,在必要的时候使用它。

下面这句话是Python的发明者说的:

“If you want your code to run faster, you should probably just use
PyPy.” – Guido van Rossum (creator of Python)

翻译成中文的意思是:

如果你想让代码运行的更快,你或许应该直接用PyPy.

2 PyPy是什么?

到底什么是PyPy?

难道我要再学习一门编程语言吗?

不不不!

PyPy只是另外一种Python代码执行引擎。你的Python代码可以在不做任何改动的情况下,直接运行在PyPy上。

就好像你原本开一辆夏利汽车,现在给你来了一辆法拉利!

同样是,同样的驾照和驾驶技术,你忽然就变得快乐(快了)起来。因为引擎变了,你的吸引力都变大了很多。

在这里插入图片描述

3 又快又好!

PyPy为什么可以这么快呢?

我们默认使用的CPython解释器,它的执行过程是这样的:

Python源代码 -> 字节码 -> 一句一句解释成机器语言 -> 执行

而PyPy使用Just In Time(JIT)技术把Python代码直接编译成机器语言,大概过程是这样的:

Python源代码 -> 机器语言 -> 执行

就光看上面加粗的字的长度,你也看出PyPy肯定很快。

这是PyPy官网给出的比较综合的速度对比:

在这里插入图片描述
平均来说,PyPy比CPython快4.2倍。

它的好处除了速度快,还有省内存。这是官方说明:

在这里插入图片描述
更要命的是,PyPy使用它非常简单!

4 极简入门

1. 下载

去官网下载页面:

https://www.pypy.org/download.html

下载适合你的版本:

在这里插入图片描述
2. 配置环境变量

下载后随便解压到一个位置,并将这个目录添加到系统环境变量:

在这里插入图片描述
3. 使用pypy替换python命令

剩下的就是在运行python命令的地方,改成pypy3就行了。

比如打开交互式Python,直接运行pypy3就可以了:

在这里插入图片描述
再比如安装第三方库,先安装pip,然后运行和以前几乎一样的命令就行了:

pypy3 -m pip install XXX

在这里插入图片描述

注:由于我很少使用 Windows电脑,本部分截图来源于机器学习算法与Python实战 ,作者海洋。

5 适用型和局限性

如果它那么快,又省内存,为什么不把默认的CPython直接改成pypy,让地球人都用pypy好了!

本文开头说过一句话,凡事有利必有弊,没有什么事情是完美的。

Pypy的好处:

  • 速度快,比CPython的平均快4.2倍。
  • 对于占用内存比较大程序(比如几百M),可以节约内存。
  • 适合长时间运行的代码。

但是它也有不小的局限性:

  • 适合纯Python的代码
  • 对于不是纯Python的代码(通常是调用C库的Python包,比如Numpy),可能有兼容性问题。现在它已经兼容Numpy了,但是可能有其他问题。

7 最后的建议

总的建议在文章开头已经给了:

1.你不需要马上用PyPy,除非你碰到了性能问题。

2.但是你有必要知道它的存在,在必要的时候使用它。

职业发展

作为一个代码打工仔,对于绝大部分程序员来说,想要成为牛逼的真正挣钱程序员的路还很长,一刻都不能懈怠。

我们无法从HR角度,或者技术leader的角度来臆测哪种状态的面试更能获取面试官青睐。但通过我们积攒的大量的面试经验,大家多少可以推断一些成为有竞争力的程序员的一些必要条件。

大佬云集、资料丰富

当初我在字节认识一个非常非常资深的前辈,他到字节比我早三年,但因为各种原因级别不是很高。我当时问他,既然你对现状如此不满,为什么不想着离开寻找更好的机会呢?

他沉思了片刻跟我说,他说我现在在这里虽然待着不顺心,但是我接触到的人都是非常优秀的。我遇到问题,还可以和你们讨论讨论。我如果出去了,我要是再遇到问题,可能连一个讨论的人都没有。

我当时听听只是觉得有道理,现在再回想起来,感受非常深刻。三观、格局、能力,能够进入大公司的,这三个方面一般都不会太差。别的不说,就拿个人能力而言,我曾出国出差过几个月,有幸见识了许多各种海外名校的同事,和他们学习交流人工智能,这真的让我AI有了更深层次的认识。

除了优秀的同事之外,大公司里往往还有丰富的内部文档和资料。我当时在字节内部看到了很多优秀的文章,也有很多优秀的技术沙龙和分享。现在想起来两年下来,也没有去过几次,文章和资料看得也不算多,现在想想颇为遗憾。别的不说,就拿推荐领域而言,近些年质量不错的论文往往都来源于大公司尤其是国内的大公司,以腾讯、华为和头条为主。除了公开的论文,公司内部还有很多技术相关的资料和文档,这些真的可以说是有价无市,非常珍贵。

Python 知识手册

Linux 知识手册

爬虫查询手册

而且,这些资料不是扫描版的,里面的文字都可以直接复制,非常便于我们学习:

数据分析知识手册:

机器学习知识手册:

金融量化知识手册:

岗位内推、学习交流

我们大量需要前端岗位、python岗位、Java 岗位、Android 和 iOS 的开发岗位,工作地点:北京字节,欢迎校招社招扫描下方二维码找我内推

Python资料、技术、课程、解答、咨询也可以直接点击下面名片,添加官方客服斯琪

  • 11
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值