Python 3.9/3.10 版本更新前瞻:bit_count、严格压缩与字典只读视图

Dylan
Dylan
发布时间:2026-10-14| 5人浏览过
原创

本文梳理了Python 3.8至3.10的开发时间线,重点解析Python 3.10的四大核心更新:引入返回二进制中1的个数的bit_count()方法;为zip函数添加strict参数以强制检查迭代器长度;赋予字典keys/values/items视图mapping属性以获取只读代理;以及移除collections模块中ABC的向后兼容别名。

Python 3.8-3.10 版本时间线概览

当前Python生态处于3.8版本的稳定期,上周已发布最新稳定版3.8.4。与此同时,Python 3.9已进入beta开发阶段,并于2020年7月3日预发布了3.9.0b4版本,第五版beta预计次日发布。首个稳定版Python 3.9预计于2020年10月推出。此外,Python 3.10的开发工作也将于2020年5月启动,其首个beta版本预计于2021年5月发布。

对于Python开发者而言,这意味着激动人心的更新周期即将到来。基于对3.8、3.9和3.10三个版本发布计划的梳理,本文旨在整理关键时间节点,帮助开发者把握即将到来的Python开发节奏。

正如阿甘所言:"生活就像一盒巧克力,你永远不知道会得到什么。"

 

在典型的Python开发周期中,通常会经历4到5个beta版本,且首个beta之后的版本不再引入新功能。例如,Python 3.8的beta-1于2019年6月发布,而3.9的beta-1则于2020年5月发布。尽管Python 3.10刚刚启动,但官方网站已简要介绍了部分亮点功能。

本文旨在简述上述时间轴,并基于Python官方示例预览即将发布的新版本主要特性。需要注意的是,Python 3.10可能会包含更多新功能,本文将随时间推移持续更新列表。

Python 3.10 核心新功能详解

Python 3.10 核心功能预览

bit_count:二进制中1的计数

(1) 二进制表示中1的计数

Python 3.10将引入新方法bit_count(),用于返回整数二进制表示中1的个数,且结果与整数的符号无关。该功能在信息论中有实际应用,例如计算两个等长字符串的汉明距离(即不同位置的总数,参见Wiki)。关于此功能在Python中的历史背景可查阅相关文档。

底层实现上,该方法仅调用strtype的asstr.count('1')方法。以下示例展示了这一机制:


# Positive integer 
>>> num = 108 
# Let's first get the binary representation of num 
>>> bin(num) 
'0b1101100' 
>>> num.bit_count() 
4 
# Negative integer 
>>> num = -108 
>>> bin(num) 
'-0b1101100' 
>>> num.bit_count() 
4 
# Under the hood 
>>> bin(num).count('1') 

zip函数:引入strict严格模式

(2) 压缩操作将支持"严格"模式

zip函数将新增可选关键字参数strict。若设置strict=True,则参与压缩的迭代器长度必须相等,否则将抛出ValueError。在Python 3.9及之前版本中,压缩不等长列表时,输出长度将等于较短列表的长度。

如示例所示,在Python 3.10之前,zip()函数会忽略第一个列表中多出的'D'元素。而在Python 3.10中,这将触发ValueError。鉴于压缩相同数量项目的直观预期,此功能有助于提醒开发者检查输入数据。更多信息请参阅PEP 618。

Python 3.10之前的行为:


>>> list(zip(['A', 'B', 'C', 'D'], ['Apple', 'Ball', 'Cat'])) 
[('A', 'Apple'), ('B', 'Ball'), ('C', 'Cat')] 

Python 3.10中的行为:


>>> list(zip(['A', 'B', 'C', 'D'], ['Apple', 'Ball', 'Cat'], strict=True)) 
Traceback (most recent call last): ...ValueError: zip() argument 1 is longer than argument 2 

字典视图:新增mapping只读属性

(3) 字典视图的只读代理

字典的三个键方法keys()、values()和items()返回类似集合的对象,分别对应字典的键、值和项目的动态视图。对这些视图的任何修改都会反映在原始字典中。

在Python 3.10中,上述三种方法返回的视图将新增一个名为mapping的属性,用于返回该映射的只读代理。该只读代理封装了视图所引用的原始字典。以下示例说明了这一特性:

首先定义一个字典,并将其键和值分别存储到独立变量中:


>>> fruits = {'Mangos': 12, 'Figs': 100, 'Guavas': 3, 'Kiwis': 70} 
>>> keys = fruits.keys() 
>>> values = fruits.values() 
>>> list(keys) 
['Mangos', 'Figs', 'Guavas', 'Kiwis'] 

接着,使用del语句从字典中删除两个元素。此时打印键和值,将仅显示剩余项目,原始字典的变更已同步至视图。


>>> del fruits['Figs'] 
>>> del fruits['Guavas'] 
>>> print (list(keys), list(values)) 
['Mangos', 'Kiwis'] [12, 70] 

通过mapping属性,您仍可获取原始字典的只读代理。


# returns a read-only proxy of the original dictionary 
>>> values.mapping 
mappingproxy({'Mangos': 12, 'Figs': 100, 'Guavas': 3, 'Kiwis': 70}) 
>>> values.mapping['Guavas'] 
3 

向后兼容性:移除collections别名

(4) 移除部分向后兼容性

从Python 3.10开始,将移除集合模块抽象基类(ABC)的别名支持。因此,现在是忽略相应"弃用警告"并适配代码的最佳时机。

截至Python 3.9.0b4(2020年7月3日发布):

在DeprecationWarning中,直接从collections模块导入任何这些ABC已被标记为弃用。


>>> from collections import ABC_Name 
 
DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working 

本文到此结束。随着Python 3.10更多发行要点的公布,我将持续补充相关内容。请持续关注,并期待Python 3.10的发布。当前及即将发布的版本时间表可在此查阅:3.8、3.9、3.10。

以上就是关于2021年Python时间轴及即将推出功能的详细介绍,更多Python时间轴相关内容请搜索本站历史文章或继续浏览后续文章,希望大家多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。