您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python 3.11比3.10 快60%:使用冒泡排序和递归函数对比测试

时间:2022-05-20 10:50:54  来源:  作者:deephub

Python/ target=_blank class=infotextkey>Python 3.11 pre-release已经发布。 更新日志中提到:

Python 3.11 is up to 10–60% faster than Python 3.10. On average, we measured a 1.25x speedup on the standard benchmark suite. See Faster CPython for detAIls. — Python 3.11 Changelog.

Python 在生产系统上的速度一直是被新手对比和吐槽。,因为真的并不块,为了解决性能问题,我们总是需要使用 Cython 或 Tuplex 转换关键代码。

Python 3.11中特意强了这个优化,我们可以实际验证下到底有没有官方说的平均1.25倍的提升呢?

作为数据科学来说,我更期待的是看看它在 Pandas 处理DF方面是否有任何改进。

首先,让我们尝试一些斐波那契数列。

安装Python 3.11 pre-release

windows的话可以在官方下载安装文件,ubuntu可以用apt命令进行安装

sudo apt install Python3.11

我们在工作中还不能直接使用3.11。 所以需要创建单独的虚拟环境来保存两个 Python 版本。

$ virtualenv env10 --python=3.10
$ virtualenv env11 --python=3.11
# To activate v11 you can run,
$ source env11/bin/activate

Python 3.11 与 Python 3.10 相比有多快?

我创建了一个小函数来生成一些斐波那契数。

def fib(n: int) -> int:
return n if n < 2 else fib(n - 1) + fib(n - 2)

用 Timeit 运行上面的斐波那契数生成器来确定执行时间。 以下命令将重复生成过程十次并显示最佳执行时间。

# To generate the (n)th Fibonacci number
python -m timeit -n 10 "from fib import fib;fib(n)"

以下是 Python 3.10 和 Python 3.11 上的结果

Python 3.11比3.10 快60%:使用冒泡排序和递归函数对比测试

 

Python 3.11 在每次运行中都优于 Python 3.10。 执行时间大约是 3.11 版本的一半。

我其实是想确认它在 Pandas 任务上的表现。 但不幸的是,到目前为止Numpy 和 Pandas 还没有支持 Python 3.11 的版本。

冒泡排序

由于无法对 Pandas 进行基准测试,因此我们试试一般常见的计算时的性能对比,测量对一百万个数字进行排序所花费的时间。排序是日常使用的最多也是最常用的一个操作了,相信它的结果可以为我们提供一个很好的参考。

import random
from timeit import timeit
from typing import List
def bubble_sort(items: List[int]) -> List[int]:
n = len(items)
for i in range(n - 1):
for j in range(0, n - i - 1):
if items[j] > items[j + 1]:
items[j], items[j + 1] = items[j + 1], items[j]
numbers = [random.randint(1, 10000) for i in range(1000000)]
print(timeit(lambda:bubble_sort(numbers),number=5))

上面的代码生成了一百万个随机数。 timeit 函数被设置为仅测量冒泡排序函数执行的持续时间。

结果如下

Python 3.11比3.10 快60%:使用冒泡排序和递归函数对比测试

 

Python 3.11 只用了 21 秒来排序,而 3.10 对应的用时 39 秒。

I/O 操作是否存在性能差异?

这两个版本在磁盘上读写信息的速度有差异吗。在pandas读取df还有深度学习读取数据时 I/O 性能至关重要。

这里准备了2个程序 第一个将一百万个文件写入磁盘。

from timeit import timeit
statement = """
for i in range(100000):
with open(f"./data/a{i}.txt", "w") as f:
f.write('a')
"""
print(timeit(statement, number=10))

我们使用 timeit 函数来打印持续时间。 可以多次重复该任务并通过设置 number 参数取平均值。

第二个程序也使用 timeit 函数。 但它只读取一百万个文件。

from glob import glob
from timeit import timeit
file_paths = glob("./data/*.txt")
statement = f"""
for path in {file_paths}:
with open(path, "r") as f:
f.read()
"""

print(timeit(statement, number=10))

下面是我们运行两个版本的输出。

Python 3.11比3.10 快60%:使用冒泡排序和递归函数对比测试

 

虽然看起来 Python 3.10 比 Python 3.11 有优势,但并不重要。因为多次运行这个实验会得出不同的结论,但是能够肯定的是,这里I/O方面并没有提升。

总结

Python 3.11 仍然是一个预发布版本。 3但它似乎是 Python 历史上一个了不起的版本。它比之前的版本快了 60%,这个判断还是没毛病的,我们上面的一些实验也证明了 Python 3.11 确实更快。

译者注:前几天刚把以前项目升级到了3.6,新项目都使用3.9开发了,现在3.11又马上要发布了,而且还说性能有大幅提升,龟叔你这是要闹哪样

 

作者:Thuwarakesh Murallie



Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
一篇文章教会你使用Python中三种简单的函数
所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。一、函数简介所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。二、函数定义...【详细内容】
2024-04-11  Search: Python  点击:(12)  评论:(0)  加入收藏
一篇文章带你了解Python的分布式进程接口
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。一、前言在Thread和Process中,应当优...【详细内容】
2024-04-11  Search: Python  点击:(10)  评论:(0)  加入收藏
Python 可视化:Plotly 库使用基础
当使用 Plotly 进行数据可视化时,我们可以通过以下示例展示多种绘图方法,每个示例都会有详细的注释和说明。1.创建折线图import plotly.graph_objects as go# 示例1: 创建简单...【详细内容】
2024-04-01  Search: Python  点击:(15)  评论:(0)  加入收藏
Python 办公神器:教你使用 Python 批量制作 PPT
介绍本文将介绍如何使用openpyxl和pptx库来批量制作PPT奖状。本文假设你已经安装了python和这两个库。本文的场景是:一名基层人员,要给一次比赛活动获奖的500名选手制作奖状,并...【详细内容】
2024-03-26  Search: Python  点击:(21)  评论:(0)  加入收藏
Python实现工厂模式、抽象工厂,单例模式
工厂模式是一种常见的设计模式,它可以帮助我们创建对象的过程更加灵活和可扩展。在Python中,我们可以使用函数和类来实现工厂模式。一、Python中实现工厂模式工厂模式是一种常...【详细内容】
2024-03-07  Search: Python  点击:(38)  评论:(0)  加入收藏
不可不学的Python技巧:字典推导式使用全攻略
Python的字典推导式是一种优雅而强大的工具,用于创建字典(dict)。这种方法不仅代码更加简洁,而且执行效率高。无论你是Python新手还是有经验的开发者,掌握字典推导式都将是你技能...【详细内容】
2024-02-22  Search: Python  点击:(43)  评论:(0)  加入收藏
如何进行Python代码的代码重构和优化?
Python是一种高级编程语言,它具有简洁、易于理解和易于维护的特点。然而,代码重构和优化对于保持代码质量和性能至关重要。什么是代码重构?代码重构是指在不改变代码外部行为的...【详细内容】
2024-02-22  Search: Python  点击:(44)  评论:(0)  加入收藏
Python开发者必备的八个PyCharm插件
在编写代码的过程中,括号几乎无处不在,以至于有时我们会拼命辨别哪个闭合括号与哪个开头的括号相匹配。这款插件能帮助解决这个众所周知的问题。前言在PyCharm中浏览插件列表...【详细内容】
2024-01-26  Search: Python  点击:(92)  评论:(0)  加入收藏
Python的Graphlib库,再也不用手敲图结构了
Python中的graphlib库是一个功能强大且易于使用的工具。graphlib提供了许多功能,可以帮助您创建、操作和分析图形对象。本文将介绍graphlib库的主要用法,并提供一些示例代码和...【详细内容】
2024-01-26  Search: Python  点击:(95)  评论:(0)  加入收藏
大语言模型插件功能在携程的Python实践
作者简介成学,携程高级安全研发工程师,关注Python/Golang后端开发、大语言模型等领域。一、背景2023年初,科技圈最火爆的话题莫过于大语言模型了,它是一种全新的聊天机器人模型,...【详细内容】
2024-01-26  Search: Python  点击:(84)  评论:(0)  加入收藏
▌简易百科推荐
一篇文章教会你使用Python中三种简单的函数
所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。一、函数简介所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。二、函数定义...【详细内容】
2024-04-11  Go语言进阶学习  微信公众号  Tags:Python   点击:(12)  评论:(0)  加入收藏
一篇文章带你了解Python的分布式进程接口
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。一、前言在Thread和Process中,应当优...【详细内容】
2024-04-11  Go语言进阶学习    Tags:Python   点击:(10)  评论:(0)  加入收藏
Python 可视化:Plotly 库使用基础
当使用 Plotly 进行数据可视化时,我们可以通过以下示例展示多种绘图方法,每个示例都会有详细的注释和说明。1.创建折线图import plotly.graph_objects as go# 示例1: 创建简单...【详细内容】
2024-04-01  Python技术    Tags:Python   点击:(15)  评论:(0)  加入收藏
Python 办公神器:教你使用 Python 批量制作 PPT
介绍本文将介绍如何使用openpyxl和pptx库来批量制作PPT奖状。本文假设你已经安装了python和这两个库。本文的场景是:一名基层人员,要给一次比赛活动获奖的500名选手制作奖状,并...【详细内容】
2024-03-26  Python技术  微信公众号  Tags:Python   点击:(21)  评论:(0)  加入收藏
Python实现工厂模式、抽象工厂,单例模式
工厂模式是一种常见的设计模式,它可以帮助我们创建对象的过程更加灵活和可扩展。在Python中,我们可以使用函数和类来实现工厂模式。一、Python中实现工厂模式工厂模式是一种常...【详细内容】
2024-03-07  Python都知道  微信公众号  Tags:Python   点击:(38)  评论:(0)  加入收藏
不可不学的Python技巧:字典推导式使用全攻略
Python的字典推导式是一种优雅而强大的工具,用于创建字典(dict)。这种方法不仅代码更加简洁,而且执行效率高。无论你是Python新手还是有经验的开发者,掌握字典推导式都将是你技能...【详细内容】
2024-02-22  子午Python  微信公众号  Tags:Python技巧   点击:(43)  评论:(0)  加入收藏
如何进行Python代码的代码重构和优化?
Python是一种高级编程语言,它具有简洁、易于理解和易于维护的特点。然而,代码重构和优化对于保持代码质量和性能至关重要。什么是代码重构?代码重构是指在不改变代码外部行为的...【详细内容】
2024-02-22  编程技术汇    Tags:Python代码   点击:(44)  评论:(0)  加入收藏
Python开发者必备的八个PyCharm插件
在编写代码的过程中,括号几乎无处不在,以至于有时我们会拼命辨别哪个闭合括号与哪个开头的括号相匹配。这款插件能帮助解决这个众所周知的问题。前言在PyCharm中浏览插件列表...【详细内容】
2024-01-26  Python学研大本营  微信公众号  Tags:PyCharm插件   点击:(92)  评论:(0)  加入收藏
Python的Graphlib库,再也不用手敲图结构了
Python中的graphlib库是一个功能强大且易于使用的工具。graphlib提供了许多功能,可以帮助您创建、操作和分析图形对象。本文将介绍graphlib库的主要用法,并提供一些示例代码和...【详细内容】
2024-01-26  科学随想录  微信公众号  Tags:Graphlib库   点击:(95)  评论:(0)  加入收藏
Python分布式爬虫打造搜索引擎
简单分布式爬虫结构主从模式是指由一台主机作为控制节点负责所有运行网络爬虫的主机进行管理,爬虫只需要从控制节点那里接收任务,并把新生成任务提交给控制节点就可以了,在这个...【详细内容】
2024-01-25  大雷家吃饭    Tags:Python   点击:(63)  评论:(0)  加入收藏
站内最新
站内热门
站内头条