中企动力 > 头条 > python什么版本

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python什么版本

Python 3.X脚本——自动安装Python版本并自动配置python环境变量 推广视频课程

img

韩冰颜

关注

Python 3.X 脚本——一键自动安装Python版本并自动配置python环境变量

使用Python 3.X 语言实现一个选择python版本后,自动化在Linux CentOS系统上安装python并配置python环境变量的脚本。

在该脚本中需要用到python的两个模块:os、sys。

其中os模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作。

OS模块重要函数和变量:

1 )、os.sep 更改操作系统中的路径分隔符。

2 )、os.getcwd()获取当前路径,这个在Python代码中比较常用。

3 )、os.listdir() 列出当前目录下的所有文件和文件夹。

4 )、os.remove() 方法可以删除指定的文件。

5 )、os.system() 方法用来运行shell命令。

6 )、os.chdir() 改变当前目录,到指定目录中。

sys模块提供了一种方便的使用操作系统函数的方法。

1 )、sys.argv: 实现从程序外部向程序传递参数。

2 )、sys.exit([arg]): 程序中间的退出,arg=0为正常退出。

3 )、sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。

4 )、sys.setdefaultencoding(): 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding('utf8'),此时将系统默认编码设置为utf8。

5 )、sys.getfilesystemencoding(): 获取文件系统使用编码方式

6 )、sys.path: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

7 )、sys.platform: 获取当前系统平台。

8 )、sys.stdin,sys.stdout,sys.stderr: stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们

sys模块与os模块的区别在于:os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。

在本脚本中,实现思路为:判断当前用户是否为root用户 ---> 选择安装的软件版本 ---> 下载软件安装包 ---> 解压、配置、编译、安装 --->配置python环境变量。

其在在编写时需要注意的点有:Linux 中安装时,要注意安装python相关依赖。比如gcc,zlib-devel等;根据选择安装的python版本号进行校验判断重而走不同的逻辑实现。进行判断校验时需要留住异常情况,当出现异常错误时,使用sys模块进行退出,并在退出时返回不同的状态码。

脚本源码:

详细的多维度测评 看看哪个Python版本速度最快 企业视频课程

img

爱飞

关注

哪个版本的 Python 最快?当然,这些问题由多种因素决定,其中的主要的因素是什么呢?我们又如何为自己的应用寻找最快的 Python 版本呢?带着这些问题,Hackermoon 上一位叫 Anthony Shaw 的作者为我们做了一些测试。

Anthony Shaw :Dimension Data 的 Talent 集团总监,Python 软件基金会成员,Apache 基金会成员

以下是对作者原文的翻译:

使用 Python 性能测试套件

正如之前我在 speed.python.org 网站提到的,Python 核心开发团队非常重视性能问题,这对于比较官方基准和 CPython 版本非常有用。

如图,测试结果很难直观读取其中不包含 PyPy

你可以通过执行 pip install performance 命令来下载测试套件,然后执行如下命令:

pyperformance run --python={chosen_python_runtime} -o my_results.json

该命令会针对 Python 的目标版本多次运行一系列“实际”应用程序,并记录测试结果,取其平均值。

本文我对以下官方版本进行了测试:

Python 2.7.10Python 3.4.4Python 3.5.4Python 3.6.1Python 3.7 beta 2(译者注:作者进行测试时 Python 3.7 版本还未正式发布,beta 2 性能与正式版非常接近,同样具有参考价值。Python 3.7 正式发布内容请看这里)

同时还测试了 PyPy(5.6)和 PyPy 3(5.10.0)。

测试结果

我根据这套测试用例进行了测试,你也可以根据自己的情况自己编写一套测试。

我编写了一个简单的脚本,来获得性能数据文,并将它们绘制成了图表。脚本代码你可以在这里找到:

https://gist.github/tonybaloney/4e8e45f9128e9eb6e4f36c73ba5e5574

所有图表都以秒为单位,数值越低,表示性能越好。

完整的测试结果及图表展示可请参阅:

https://github/tonybaloney/performance_testing/tree/master/png

渲染 HTML 模板

django_html 测试将使用 Django 模板渲染引擎来构建一个 150x150 的 HTML 表格。 它利用了 Django 引擎的 Content 和 Template 类。

如图所示,Python 3.7 比 Python 2.7 快 1.19 倍,但除此之外,其他 Python 3 版本都没有 Python 2.7 快。该结果与 speed.python.org 网站的测试结果一致。

PyPy 的测试结果显示,PyPy 比 CPython 的任何 Python 版本都快,PyPy 3 比 PyPy 慢两倍。Django 2.0 及更高版本已决定放弃对 Python 2 的支持,因此 PyPy 将不再与 Django 2 兼容。

启动时间测试

该部分测试解释器的启动时间

如图所示,Python 2.7 是所有测试版本中启动速度最快的。

注:此处暂不讨论 PyPy 的测试结果,文末再谈。

加密测试(Crypto):crypto_paes

在这个测试中,Python 2 的速度明显快于 Python 3,因为 Crypto 要求大量数字运算,而 Python 3 没有 32 位整数类型,只有一个长整型(long integer)。

同样差距比较明显的是,PyPy 3 比 PyPy 慢 5 倍。

算法测试:n-queens

结果显示,在 CPython 系列中,Python 3.7 性能最佳。此外,PyPy 3 和 PyPy 测试结果比较接近,PyPy 小胜。

浮点运算测试

“浮点”基准测试需要人工创建繁重的浮点运算应用程序,在这里我们通过 math.cos(),math.sin() 和 math.sqrt() 函数创建,总共创建 10 万个浮点对象。

PyPy 非常适合浮点运算,在大量的数字运算、可预测的类型和方法以及循环上展现了非常优秀的性能。Python 3.7 具有新的方法能快速调用操作码,该操作码正在此测试中刚好用上,表现佳。

正则表达式测试

在这项测试中,我选用了 50 个最受欢迎的网页,并记录了所有正则表达式的操作。 每个操作都被赋予权重,该权重是根据页面流行度的估计以及在加载每个页面时执行的次数来计算的。 最后,数据中的字母使用 ROT13 进行编码,其方式不会影响正则表达式与输入的匹配程度。

PyPy 的测试结果让人大跌眼镜,不知道它都经历了些什么......

补充:PyPy 后来看到了这项测试结果,花了几个小时把问题修复了

Python 3 比 Python 2 快吗?

综上测试所述,答案是 Yes!虽然也有几项测试结果显示 Python 3 比 Python 2 慢:

加密测试:Python 3 的比 Python2 慢 1.35 倍(原因在上文已做解释)启动时间测试:Python 3 比 Python 2 慢 1.39 倍

但从整体结果来看,Python 3 更快。CPython 核心开发团队曾表示,启动速度问题是他们在 3.8 和 3.9 版本中着重要解决的问题。

PyPy 很快,我要使用它吗?

PyPy 有 JIT 即时编译器,在执行可预测的重复性任务时非常高效,而 Python 性能测试需要多次运行同一段代码来保证准确性,因此,PyPy 面对这种测试性能,表现比 CPython 更佳。

但是,PyPy 的 JIT 编译器的显著缺点就是启动成本高,并且,许多 C 语言扩展程序缺乏兼容性。另外,由于 PyPy 是用 Python 编写的,许多模板在 PyPy 中无法工作,使用者需要时常进行检查。

PyPy 也同样需要面对从 Python2 向 Python3 转变的问题。PyPy3 还不太稳定,PyTest 就已经放弃了对 PyPy3 的支持。

结论

Python 在所有官方版本测试中表现最佳,PyPy 在解释器测试的表现最佳。Python 2 以后会用得越来越少,直到废弃。如果 PyPy 3 的速度始终不能比 PyPy 快,能有所提升也是好的。

Python2.x与Python3.x版本区别 推广视频课程

img

瑞加娜

关注

Python2.x与3.x版本区别 Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。 许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。 为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Py..

Python2.x与3.x版本区别

Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。

为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。

许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。

为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。

新的Python程式建议使用Python 3.0版本的语法。

除非执行环境无法安装Python 3.0或者程式本身使用了不支援Python 3.0的第三方库。目前不支援Python 3.0的第三方库有Twisted, py2exe, PIL等。

大多数第三方库都正在努力地相容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7来执行。

主要变化

Python 3.0的变化主要在以下几个方面:

print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2.7里面,以下三种形式是等价的:

print "fish"print ("fish") #注意print后面有个空格print("fish") #print()不能带有任何其它参数然而,Python 2.6实际已经支持新的print()语法:

from __future__ import print_functionprint("fish", "panda", sep=', ')新的str类别表示一个Unicode字串,相当于Python 2.x版本的unicode类别。而位元组序列则用类似b"abc"的语法表示,用bytes类表示,相当于Python 2.x的str类别。

现在两种类别不能再隐式地自动转换,因此在Python 3.x里面"fish"+b"panda"是错误。正确的写法是"fish"+b"panda".decode("utf-8")。 Python 2.6可以自动地将位元组序列识别为Unicode字串,方法是:

from __future__ import unicode_literalsprint(repr("fish"))除法运算符"/"在Python 3.x内总是返回浮点数。而在Python 2.6内会判断被除数与除数是否是整数。如果是整数会返回整数值,相当于整除;浮点数则返回浮点数值。

为了让Python 2.6统一返回浮点数值,可以:

from __future__ import pisionprint(3/2)捕获异常的语法由except exc, var改为except exc as var。使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。 Python 2.6已经支援这两种语法。集合(set) 的新写法:{1,2,3,4}。注意{}仍然表示空的字典(dict) 。字典推导式(Dictionary comprehensions) {expr1: expr2 for k, v in d},这个语法等价于result={}for k, v in d.items(): result[expr1]=expr2return result集合推导式(Set Comprehensions) {expr1 for x in stuff}。这个语法等价于:

result = set()for x in stuff: result.add(expr1)return result八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。新增了一个bin()函数用于将一个整数转换成二进制字串。 Python 2.6已经支援这两种语法。dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip()不再返回列表,而是迭代器。如果两个物件之间没有定义明确的有意义的顺序。使用<, >,<=, >=比较它们会投掷异常。比如1< ""在Python 2.6里面会返回True,而在Python 3.0里面会投掷异常。现在cmp(), instance.__cmp__()函数已经被删除。可以注释函数的参数与返回值。此特性可方便IDE对原始码进行更深入的分析。例如给参数增加类别讯息:def sendMail(from_: str, to: str, title: str, body: str) -> bool: pass合并int与long类型。多个模块被改名(根据PEP8):旧的名字新的名字_winregwinregConfigParserconfigparsercopy_regcopyregQueuequeueSocketServersocketserverreprreprlibStringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。 Python 2.6已经支援新的io模组。httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。取消了exec语句,只剩下exec()函数。 Python 2.6已经支援exec()函数。

Python与Matlab完美结合教程,适用于所有系统、版本! 行业视频课程

img

不爱

关注

1、安装MATLAB Engine API for python

2、Python调用我们的脚本/函数

通过引擎调用新的

triarea

函数。

ret = eng.triarea(1.0,5.0)print(ret)

2.5

triarea

函数仅返回一个输出参数,因此无需指定

nargout

函数

MATLAB建立一个function文件:

你能否找出更加简便的Python与MATLAB结合?Windows,Mac和Linux环境都适用!

学习Python,你选哪个版本 2 vs 3 ? 行业视频课程

img

落凡尘

关注

Python一个很大的缺陷是版本2 和版本3 不兼容,初学者也经常纠结是学2还是学3。2017年Semaphore 社区调查了 Python 在 Semaphore 的托管 CI 服务中构建应用程序的使用情况。

1、Python2和Python3 事情情况

2016年调查显示有 70% 以上的用户仍在使用 Python 2.7,Python 3 的使用率较低。2017年,Python 3 的使用出现了上涨,涨幅约 8.2%。如下图所示:

2、升级新版本愿望

2016年,Python 3.5 的使用率达到 60%,Python 3.4 的使用率占 30%。2017年,3.5 版和 3.4 版的使用率分别只占 34% 和 20%,有 35% 的用户已经开始使用 Python 3.6。

可见,使用 Python 3 的群体更愿意进行版本更新。

3、Python 2.7 和 Python 3 各版本的使用率对比

从图中,可以看到 Python 3 版的用户群体正在迅速扩展。

现在,新入行的学习者,如果不是项目限制必须学 Python 2.7,那还是直接学 Python3 吧。

毕竟 Guido van Rossum 曾于 2014 年宣布 Python 2.7 支持时间延长到 2020 年。

Python Web 开发框架 Django 释出了 2.0 版本。主要变化包括:停止支持 Python 2 系列。

大名鼎鼎的NumPy也宣布,从2019年1月1日开始,任何新的功能版本都只支持Python3。

Raspberry pi中python版本的切换 互联网视频课程

img

潘乐巧

关注

这个问题其实也不是在树莓派上的问题,在linux上都有这个问题,我们知道python有很多的版本,比较常用的是2.7和3.0。然而在有些时候,有些包对版本的要求很高。有时候我们不得不去装几个版本的python。

我们就以树莓派为例来说一下:我们知道树莓派自带了一个python2.7。

它的可执行文件在这个目录下:/usr/bin/python

那现在我要去安装一个python 3.5。这个地方我们直接可使用源码安装,github上源码很多的。不需要我们先删除python2.7。

这个地方源码安装的可执行文件不在/usr/bin/中,它在/usr/local/bin/中

下面我们就开始切换版本了:

开始之前拷贝是很有必要的,万一搞错了呢。sudo cp /usr/bin/python /usr/bin/python_bak删除以前的这个2.7。sudo rm /usr/bin/python重新指定新的链接。sudo ln -s /usr/local/bin/python3.5 /usr/bin/python

这其实就成功了。现在的版本就是3.5了。

那么我们怎么在切换回去呢?

sudo cp /usr/bin/python /usr/bin/python3.5_baksudo rm /usr/bin/pythonsudo ln -s /usr/bin/python2.7 /usr/bin/python

在附带一个源码装python3.6.4的教程吧:

先安装依赖sudo apt-get installbuild-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev libssl-dev openssl libgdbm-dev liblzma-dev libreadline-dev libncursesw5-dev现下载源码,再解压tar -zvxf Python-3.6.4.tgz进入该目录下:

./configuremake

sudo make install

这就安装上了,自己也可以自由切换了。

比较一下不同Python版本,看哪个最快? 流量视频课程

img

以山

关注

本文所选的Python版本:

2.7.10,

3.4.4,

3.5.4,

3.6.1,和

3.7(我有beta 2)。

此外,这包括PyPy(5.6。)和PyPy3(5.4.10)。

呈现HTML模板

该django_html测试将使用Django模板渲染引擎,以建立一个150×150的HTML表格。它利用了Django引擎的内容和模板类。

Python 3.7的速度比Python 2.7快1.19倍,但是它是唯一一个能够击败我运行的Python 2.7基准的Python 3.x版本。speed.python.org基准测试显示类似的结果。

PyPy可以摧毁任何CPython结果,但PyPy3会比PyPy慢两倍。值得注意的是Django最近决定在Django 2.0及更高版本中放弃对Python 2的支持,这意味着PyPy将不再与Django 2兼容。

启动时间

该测试只是测试解释器启动所花费的时间。如果您通过运行多个进程来解决Python的“GIL”约束,那么这将非常重要。

Cryptography: crypto_paes

在这个测试中,你会看到Python 2和3之间的速度明显下降。为什么?加密需要大量的数字运算,Python 3不再具有32位整数类型,只有一个(非常)长整数。

PyPy用户 - 您会注意到PyPy3 比PyPy 慢5倍!

n-queens:算法测试

在CPython系列中,3.7 又一次出现,但值得注意的是PyPy和PyPy3的结果非常相似。

浮点运算

“浮动”的基准是一种人为的,浮点运算繁重的应用程序,将创建计算10万点的对象math.cos(),math.sin()和math.sqrt() 。

这是PyPy的完美应用,大量的数据处理,可预测的类型和方法以及循环。Python 3.7具有新的快速方法调用操作码,该操作码正在此测试中使用。

常用表达

在正则表达式测试中,“网络上最流行的网页有50个,并记录了所有正则表达式操作。每个操作都有一个权重,它是根据页面出现的热门程度以及加载每个页面时执行的次数来估算的。最后,使用ROT13对数据中的字母进行编码,这样不会影响正则表达式匹配其输入的方式。“

那么Python 3比Python 2更快吗?

是! 在几乎所有的测试中。值得注意的例外是crypto_paes测试,Python 3的速度慢了1.35倍(因为整数类型),python_startup的速度慢了1.39倍。

缓慢的Python 3启动是核心CPython团队正在为3.8,3.9版本开发的问题之一。

除了这两项测试外,Python 3在这些基准测试中的速度大约快1.2-1.3倍。今年晚些时候,你会看到升级到Python 3.7的改进。

为什么PyPy要快得多,为什么不是每个人都使用它呢?

PyPy比CPython快,因为它具有即时编译器。JIT编译器具有很大的好处,因为它们在执行可预测的重复性任务时非常高效。基准的其中一个特点是,您尝试多次运行同一段代码以使其准确无误,推送应用程序并减少错误边界。正如PyPy照耀这些测试。

JIT编译器,尤其是PyPy的缺点是启动成本高。另一个缺点是许多C-Extensions缺乏兼容性。因为“Python”(CPython,官方的PSF Python)是用C语言编写的,PyPi上的许多第三方扩展利用了这一点。Numpy就是一个很好的例子,Numpy的大部分都是用优化的C代码编写的。当你pip install numpy使用本地C编译器并为你的Python运行时建立一个二进制库来使用。

由于PyPy是用Python编写的,很多模块根本无法在PyPy中工作。

此外,PyPy也遭遇了与CPython相同的挑战 - 从语言版本2转移到版本3. PyPy3直到最近我发现它仍然不稳定,在基准测试中,您仍然可以看到与PyPy的奇怪不一致。我还遇到了一些软件包问题(例如PyTest),他们放弃了对PyPy3的支持,但他们解决了问题。

Python哪个版本适合初学者 推广视频课程

img

堇年

关注

想学习Python的人都会有一个困惑,那就是Python目前有两个版本Python2和Python3,Python2与Python3有何区别,两个版本该学习哪个呢?

python3 和 python2 是不兼容的,而且差异比较大,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的。目前实际应用中大部分暂不考虑 Python3,有的时候注意写兼容 2/3 的代码。用 Python2 为主的写新代码时要考虑以后迁移到 Python3 的可能性。据数据统计显示目前10% 使用 Python 3;20% 既使用Python 2也使用Python 3,Python 2用的更多;70% 使用Python 2。

其实python是linux上最常用的软件之一,但是linux目前的版本大部分还是使用python2的,而且,在linux上依赖python2的程序更多一些,所以 Python3 要代替 python2 成为主流还需要几年的时间。如果为了找工作还是学Python 2,学会了Python 2,由Python 2转到python3也不难。

说了半天,Python2与Python3到底有何区别呢?

1.性能

Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果。

Py3.1性能比Py2.5慢15%,还有很大的提升空间。

2.编码

Py3.X源码文件默认使用utf-8编码

3. 语法

1)去除了<>,全部改用!=

2)去除``,全部改用repr()

3)关键词加入as 和with,还有True,False,None

4)整型除法返回浮点数,要得到整型结果,请使用//

5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量

6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数

7)改变了顺序操作符的行为,例如x

8)输入函数改变了,删除了raw_input,用input代替:

9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了

10)新式的8进制字变量,相应地修改了oct()函数。

11)增加了 2进制字面量和bin()函数

12)扩展的可迭代解包。在Py3.X 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list 对象和seq是可迭代的。

13)新的super(),可以不再给super()传参数,

14)新的metaclass语法:

15)支持class decorator。

4. 字符串和字节串

1)现在字符串只有str一种类型,但它跟2.x版本的unicode几乎一样。

2)关于字节串,请参阅“数据类型”的第2条目

5.数据类型

1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long

2)新增了bytes类型

6.面向对象

1)引入抽象基类(Abstraact Base Classes,ABCs)。

2)容器类和迭代器类被ABCs化,所以cellections模块里的类型比Py2.5多了很多。

3)迭代器的next()方法改名为__next__(),并增加内置函数next(),用以调用迭代器的

4)增加了@abstractmethod和 @abstractproperty两个 decorator,编写抽象方法(属性)更加方便。

7.异常

1)所以异常都从 BaseException继承,并删除了StardardError

2)去除了异常类的序列行为和.message属性

3)用 raise Exception(args)代替 raise Exception, args语法

4)捕获异常的语法改变,引入了as关键字来标识异常实例

5)异常链,因为__context__在3.0a1版本中没有实现

8.模块变动1)移除了cPickle模块,可以使用pickle模块代替。最终我们将会有一个透明高效的模块。

2)移除了imageop模块

3)移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, imeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块

4)移除了bsddb模块(单独发布,可以从Python "bindings" for Oracle Berkeley DB获取)

5)移除了new模块

6)os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下

7)tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是 tokenize.tokenize()

9.其它 1)xrange() 改名为range(),要想使用range()获得一个list,必须显式调用

2)bytes对象不能hash,也不支持 b.lower()、b.strip()和b.split()方法

3)zip()、map()和filter()都返回迭代器。

4)string.letters和相关的.lowercase和.uppercase被去除,请改用string.ascii_letters 等

5)如果x< y的不能比较,抛出TypeError异常

6)__getslice__系列成员被废弃。

7)file类被废弃

详细的多维度测评 看看哪个Python版本速度最快 企业视频课程

img

褚白梅

关注

哪个版本的 Python 最快?当然,这些问题由多种因素决定,其中的主要的因素是什么呢?我们又如何为自己的应用寻找最快的 Python 版本呢?带着这些问题,Hackermoon 上一位叫 Anthony Shaw 的作者为我们做了一些测试。

Anthony Shaw :Dimension Data 的 Talent 集团总监,Python 软件基金会成员,Apache 基金会成员

以下是对作者原文的翻译:

使用 Python 性能测试套件

正如之前我在 speed.python.org 网站提到的,Python 核心开发团队非常重视性能问题,这对于比较官方基准和 CPython 版本非常有用。

如图,测试结果很难直观读取其中不包含 PyPy

你可以通过执行 pip install performance 命令来下载测试套件,然后执行如下命令:

pyperformance run --python={chosen_python_runtime} -o my_results.json

该命令会针对 Python 的目标版本多次运行一系列“实际”应用程序,并记录测试结果,取其平均值。

本文我对以下官方版本进行了测试:

Python 2.7.10Python 3.4.4Python 3.5.4Python 3.6.1Python 3.7 beta 2(译者注:作者进行测试时 Python 3.7 版本还未正式发布,beta 2 性能与正式版非常接近,同样具有参考价值。Python 3.7 正式发布内容请看这里)

同时还测试了 PyPy(5.6)和 PyPy 3(5.10.0)。

测试结果

我根据这套测试用例进行了测试,你也可以根据自己的情况自己编写一套测试。

我编写了一个简单的脚本,来获得性能数据文,并将它们绘制成了图表。脚本代码你可以在这里找到:

https://gist.github/tonybaloney/4e8e45f9128e9eb6e4f36c73ba5e5574

所有图表都以秒为单位,数值越低,表示性能越好。

完整的测试结果及图表展示可请参阅:

https://github/tonybaloney/performance_testing/tree/master/png

渲染 HTML 模板

django_html 测试将使用 Django 模板渲染引擎来构建一个 150x150 的 HTML 表格。 它利用了 Django 引擎的 Content 和 Template 类。

如图所示,Python 3.7 比 Python 2.7 快 1.19 倍,但除此之外,其他 Python 3 版本都没有 Python 2.7 快。该结果与 speed.python.org 网站的测试结果一致。

PyPy 的测试结果显示,PyPy 比 CPython 的任何 Python 版本都快,PyPy 3 比 PyPy 慢两倍。Django 2.0 及更高版本已决定放弃对 Python 2 的支持,因此 PyPy 将不再与 Django 2 兼容。

启动时间测试

该部分测试解释器的启动时间

如图所示,Python 2.7 是所有测试版本中启动速度最快的。

注:此处暂不讨论 PyPy 的测试结果,文末再谈。

加密测试(Crypto):crypto_paes

在这个测试中,Python 2 的速度明显快于 Python 3,因为 Crypto 要求大量数字运算,而 Python 3 没有 32 位整数类型,只有一个长整型(long integer)。

同样差距比较明显的是,PyPy 3 比 PyPy 慢 5 倍。

算法测试:n-queens

结果显示,在 CPython 系列中,Python 3.7 性能最佳。此外,PyPy 3 和 PyPy 测试结果比较接近,PyPy 小胜。

浮点运算测试

“浮点”基准测试需要人工创建繁重的浮点运算应用程序,在这里我们通过 math.cos(),math.sin() 和 math.sqrt() 函数创建,总共创建 10 万个浮点对象。

PyPy 非常适合浮点运算,在大量的数字运算、可预测的类型和方法以及循环上展现了非常优秀的性能。Python 3.7 具有新的方法能快速调用操作码,该操作码正在此测试中刚好用上,表现佳。

正则表达式测试

在这项测试中,我选用了 50 个最受欢迎的网页,并记录了所有正则表达式的操作。 每个操作都被赋予权重,该权重是根据页面流行度的估计以及在加载每个页面时执行的次数来计算的。 最后,数据中的字母使用 ROT13 进行编码,其方式不会影响正则表达式与输入的匹配程度。

PyPy 的测试结果让人大跌眼镜,不知道它都经历了些什么......

补充:PyPy 后来看到了这项测试结果,花了几个小时把问题修复了

Python 3 比 Python 2 快吗?

综上测试所述,答案是 Yes!虽然也有几项测试结果显示 Python 3 比 Python 2 慢:

加密测试:Python 3 的比 Python2 慢 1.35 倍(原因在上文已做解释)启动时间测试:Python 3 比 Python 2 慢 1.39 倍

但从整体结果来看,Python 3 更快。CPython 核心开发团队曾表示,启动速度问题是他们在 3.8 和 3.9 版本中着重要解决的问题。

PyPy 很快,我要使用它吗?

PyPy 有 JIT 即时编译器,在执行可预测的重复性任务时非常高效,而 Python 性能测试需要多次运行同一段代码来保证准确性,因此,PyPy 面对这种测试性能,表现比 CPython 更佳。

但是,PyPy 的 JIT 编译器的显著缺点就是启动成本高,并且,许多 C 语言扩展程序缺乏兼容性。另外,由于 PyPy 是用 Python 编写的,许多模板在 PyPy 中无法工作,使用者需要时常进行检查。

PyPy 也同样需要面对从 Python2 向 Python3 转变的问题。PyPy3 还不太稳定,PyTest 就已经放弃了对 PyPy3 的支持。

结论

Python 在所有官方版本测试中表现最佳,PyPy 在解释器测试的表现最佳。Python 2 以后会用得越来越少,直到废弃。如果 PyPy 3 的速度始终不能比 PyPy 快,能有所提升也是好的。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP