原标题:Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型

Python 的 3.9.0 版本正在开发中,计划在 2020-10-05发布final版本。

官方在 changelog 中披露了很多细节,其中有一项“vectorcall”特性是最容易被接受的,本文打算带大家先来一探究竟。

事实上,早在 Python 3.8 版本中就已部分地实现了 vectorcall,只不过它是暂时性的,被隐藏起来了,按计划是在 3.9 版本中实现完全体。下图是 3.8 版本中的简介:

那么,什么是 vectorcall 呢?它会带来哪些变化呢?

“ a fast calling protocol for CPython”,即它是 CPython 的一种快速调用协议, 可以加速 CPython 解释器在调用类对象时的速度。

(PS:需要注意的是,这里说的“协议”是一种广义的称呼,它跟我们熟知的网络协议或通信协议不同,可理解为对代码作调用时的一种约定、一种实现方式)

这种协议是在 PEP-590 中被提出的(时间是 2019-03-29),对应的 bpo 是 issue37207,历时近一年的开发,目前它的实现已合入了代码仓。

用一句话概括它的核心要点是: 它将提升 list、tuple、dict 等主要类型的调用速度,同时它还可以被用在自定义的类上。

结合 PEP 与 bpo 信息,我提炼了以下的详细要点:

vectorcall 是对 fastcall 的正式化。在之前的 CPython 中存在一些零散的优化点(即 fastcall ),如今官方把它们系统化了,给出了一个正式的“ vectorcall ”称呼

vectorcall 适用于多数内置类型。据当前的披露信息,它适用于 list、tuple、dict、set、frozenset 与 range 这 6 种主要的内置类型(部分测量数据显示,速度提升率达 10%~30%)

vectorcall 是对性能与灵活性的调和。之前的解释器具有很高的灵活性,但是在对象调用过程中,存在不必要的中间对象以及间接的调用开销,如今是设法消除了这部分开销,得以提升了性能

PEP-590 中还详细介绍了 CPython 的实现细节,并罗列了 C API 的变化点,这部分内容就不展开了,感兴趣的同学请自行查阅文档。

--------猫哥碎碎念分割线--------

主要的内容就算介绍完了,它很简单,并不难理解,不会带来学习的负担,也不会造成什么意见分歧。

但是说句老实话,这个性能提升可能显得有点“费力不讨好”:内置类型的调用速度并不会造成什么性能问题(并不慢),而提升空间也仅是纳秒/微秒级别,非常有限。多名核心开发者花费大半年时间和精力,到底值不值得?

我们恐怕都没有对此作出价值评判的资格。仁者见仁,智者见智。

但是,也许我们可以往乐观的方面想:对于这种微不足道的性能提升,核心开发者们都能认真对待、精益求精、持续投入、考虑全面,那在其它方面上也绝不会逊色。所以,我们有理由对 Python的未来持乐观的希望!

提供300分钟视频讲解,教学大纲、课件、教案、习题答案、程序源码等配套资源。

扫码,优惠购书

凡是在京东购书的用户,可以将订单信息和评价发到itbook8@163.com,将会获取超值大礼包(包括案例源码,超多的视频教程,数据集等资源)返回搜狐,查看更多

责任编辑:

python 3.9 性能_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型相关推荐

  1. python3.9性能_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型

    Python 的 3.9.0 版本正在开发中,计划在 2020-10-05 发布 final 版本. 官方在 changelog 中披露了很多细节,其中有一项"vectorcall" ...

  2. python跟java 效率_Python与Java:哪个更好,如何选择?

    Python与Java新手应该选哪个?应该是当今讨论最为热门的话题了. 在过去的几年中,Python的普及速度令人惊叹,Java的王者地位也常年不衰.目前两者的竞争愈发激烈,怎么选择成为了许多初学者萦 ...

  3. python太占内存_Python占用的内存优化教程

    概述 如果程序处理的数据比较多.比较复杂,那么在程序运行的时候,会占用大量的内存,当内存占用到达一定的数值,程序就有可能被操作系统终止,特别是在限制程序所使用的内存大小的场景,更容易发生问题.下面我就 ...

  4. clickhouse hbase性能对比_如何让 HBase 更快、更稳、更省钱

    概述 Apache HBase 是 Apache Hadoop 生态体系中的大规模.可扩展.分布式的数据存储服务.同时它还是 NoSQL 数据库.它的设计初衷是为包含了数百万列的数十亿行记录提供随机的 ...

  5. python dataframe是什么_python – 逐个构建DataFrame的最快方法是什么?

    我正在从bloomberg下载价格数据,并希望以最快和最少内存密集的方式构建DataFrame.假设我通过python向bloomberg提交数据请求,以获取从1-1-2000到1-1-2013的所有 ...

  6. Python很慢,但它即将变得更快

    作为一门异常受欢迎的编程语言,Python的优点有很多,比如:易于学习.用途广泛.有成千上万个用于数据科学的有用的库.但同时,Python一直被诟病的就是它运行速度太慢. 在去年的PyCon US 2 ...

  7. Python很慢,但它将变得更快!

    作为一门异常受欢迎的编程语言,Python的优点有很多,比如:易于学习.用途广泛.有成千上万个用于数据科学的有用的库.但同时,Python一直被诟病的就是它运行速度太慢. 在去年的PyCon US 2 ...

  8. vscode运行python快捷键_21 个VSCode 快捷键,让代码更快,更有趣

    点赞再看,养成习惯 本文 GitHub https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了很多我的文档,和教程资料.欢迎Star和完善,大家 ...

  9. python xmxl 无法启动_Python小白到老司机,快跟我上车!基础篇(三)

    1.python命令运行程序 在安装完Python开发环境后,就可以直接进行Python开发了,流程如下: 使用文本编辑器编写代码,写完后保存为.py后缀,终端输入python xxx.py运行. 建 ...

最新文章

  1. matlab的index函数,写论文第九天:MATLAB之rsindex函数
  2. 用lemon测交互题
  3. opencv2 取二进制数据_百亿数据量下,掌握这些Redis技巧你就能Hold全场
  4. MyBatis-Plus_实体作为条件构造器构造方法的参数
  5. linux 查看neihe版本_linux查看系统内核版本号
  6. 基于Qt搭建ROS开发环境
  7. Vue学习笔记:使用CLI构建Vue项目
  8. 泽元网站内容管理系统 (简称ZCMS)
  9. TIOBE 6 月编程语言排行榜:Java 放缓,C 复兴了!
  10. 【动态规划】LeetCode 377. Combination Sum IV
  11. Visio 2003 Professional 安装序列号
  12. python世界你好_“你好,世界Python教程
  13. Mybatis插件动态数据库链接
  14. 应用中安装第三方apk的两种方法:利用Intent跳转安装页面、利用PackageInstaller静默安装
  15. Spring boot微服务项目中上传图片报错,The field file exceeds its maximum permitted size of 1048576 bytes.
  16. 南方航空认沽权证21日上市 初始行权价为7.43元
  17. 《OKR工作法》学习总结
  18. 一个故事看懂AI神经网络工作原理
  19. Radware荣获ICSA实验室“卓越信息安全测试奖”
  20. flashback(二)

热门文章

  1. 【Elasticsearch】es 查询 multi_match 与 match_phrase
  2. 【高并发】JUC底层工具类Unsafe
  3. 使用XStream注解处理复杂xml的属性及数据集合(xml转对象)
  4. 【Flink】Flink 系统监控指标
  5. Spring: @Import @ImportResource引入资源
  6. Spring Boot如何以优雅的姿势校验参数
  7. 【Presto】Cannot connect to discovery server for announce: Announcement failed with status code 404
  8. 综保参数如何设定_FANUC主轴速度怎么去设定限制?
  9. Java中Comparable和Comparator接口的区别
  10. 知己知彼:一篇来自前端同学对后端接口的吐槽!