Python 3.10 明年发布,看看都有哪些 PEP 了

点击上方“编程派”,选择设为“设为星标
php

优质文章,第一时间送达!编程

咱们目前生活在Python 3.8的稳定时代,上周发布了Python的最新稳定版本3.8.4。Python 3.9已经处于其开发的beta阶段,而且2020年7月3日预发布了beta版本(3.9.0b4),第五版beta预约于明天发布。3.9的第一个稳定版本预计将在2020年10月发布。Python3.10的开发也将于2020年5月开始,而且第一个beta版本预计在2021年5月开始。多线程

对于Python爱好者来讲,显然,有趣的时代即将到来。浏览三个版本(3.八、3.9和3.10)的发布时间表,敦促我在即将到来的有趣的Python开发时间表中编制关键日期。app

"我妈妈老是说生活就像一盒巧克力。你永远都不知道会获得什么。" - 阿甘ide

一般,在开发周期中会有4–5个beta版本,而且在第一个beta版本以后的版本中不会引入任何新功能。对于3.8,beta-1已于2019年6月发布;对于3.9,beta-1已于2020年5月发布。尽管将来的Python 3.10刚刚启动,但官方网站已经在其一些亮点中进行了简要介绍。函数

这篇文章旨在简要介绍时间轴,并预览即将发布的新Python版本的主要功能,以改编Python网站上的官方示例。请注意,咱们可能会在3.10版中看到更多新功能,而且随着时间的推移,我将继续更新如下列表。测试

突出显示Python 3.10中的功能

(1) 二进制表示中的频率为1

将引入一个新的方法bit_count(),该方法将返回整数的二进制表示形式中存在的个数。结果将独立于整数的符号。此功能的一个用例是在信息论中,其中对于两个等长的字符串,您能够找到两个字符串不一样的位置的总数。这种差别称为汉明距离(参见Wiki)。在此处阅读有关Python中此功能的历史记录。网站

在后台,此方法仅调用strtype asstr.count('1')的count方法。如下示例对此进行了说明:ui

# 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') 

(2) 压缩将是"严格的"

新的可选关键字参数strict将添加到zip函数中。若是passstrict = True,则压缩的可迭代项的长度必须相等,不然将引起ValueError。在Python 3.9以前,若是要压缩两个不等长的列表,则将获得长度等于较小列表的输出。spa

如如下示例所示,在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 

(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'] 

如今,咱们使用thedel语句今后字典中删除两个元素。若是如今打印键和值,您将看到它仅返回其他项目。如今,原始词典中的更改将反映在视图中(此处为键和值)。

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

如今,经过映射,您将仍然可以找回原始字典的只读代理。cool! 是否是

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

(4) 消除一些向后兼容性

集合模块的抽象基类(ABC)的别名支持将从Python 3.10开始删除。所以,如今是中止忽略相应的"弃用警告"并改编代码的好时机。

高达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 

来源:闻数起舞,头条号

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,当即获取主页君与小伙伴一块儿翻译的《Think Python 2e》电子版

回复关键词「入门资料」,当即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「m」,当即获取Python精选优质文章合集

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜爱礼哦~

推荐阅读

题图:pexels,CC0 受权。