我们目前生活在Python3.8的稳定时代,上周发布了最新的Python3.8.4稳定版。Python3.9已经进入开发测试阶段,测试版(3.9.0b4)已于2020年7月3日预发布,第五版测试版将于明天发布。3.9的第一个稳定版本预计将于2020年10月发布。Python3.10的开发也将于2020年5月开始,第一个测试版预计将于2021年5月开始。对于Python爱好者来说,有趣的时代显然即将到来。浏览三个版本(3.8、3.9和3.10)的发布时间表促使我将关键日期编译到有趣的即将到来的Python开发时间表中。“我妈妈总是说生活就像一盒巧克力。你永远不知道你会得到什么。”-ForrestGump通常,在一个开发周期中有4-5个beta,并且在第一个beta之后,此版本不会引入任何新功能。对于3.8,beta-1于2019年6月发布;对于3.9,beta-1于2020年5月发布。尽管充满未来感的Python3.10刚刚推出,但官网已经概述了它的一些亮点。这篇文章的目的是简要介绍时间线并预览即将发布的新Python版本的主要功能,改编Python网站上的官方示例。请注意,我们可能会在3.10版本中看到更多新功能,随着时间的推移,我将继续更新下面的列表。突出特点(1)Python3.10中二进制表示中1的频率引入了一个新方法bit_count(),它将返回整数的二进制表示中存在的位数。结果将独立于整数的符号。此函数的一个用例是在信息论中,对于两个长度相等的字符串,您可以找到两个字符串不同的地方的总数。这种差异称为汉明距离(请参阅Wiki)。在此处阅读Python中此功能的历史。在幕后,这个方法只是调用了strtype的count方法asstr.count('1')。下面的例子说明了这一点:#Positiveinteger>>>num=108#Let'sfirstgetthebinaryrepresentationofnum>>>bin(num)'0b1101100'>>>num.bit_count()4#Negativeinteger>>>num=-108>>>bin(num)'-0b1101100'>>>num.bit_count()4#Underthehood>>>bin(num).count('1')(2)压缩会被“strict”新增可选关键字参数strict会被添加到zip功能。如果passstrict=True,压缩的可迭代对象的长度必须相等,否则会引发ValueError。在Python3.9之前,如果你要压缩两个长度不等的列表,你会得到长度等于较小列表的输出。如以下示例所示,在Python3.10之前,zip()函数忽略了第一个列表中的不匹配“D”。相比之下,Python3.10将引发ValueError。鉴于压缩相同数量的项目的直观性,我喜欢这个功能,因为它会唤醒您重新检查您的输入。在PEP618阅读有关此问题的更多信息。在Python3.10之前:>>>list(zip(['A','B','C','D'],['Apple','Ball','Cat']))[('A','Apple'),('B','Ball'),('C','Cat')]在Python3.10中:>>>list(zip(['A','B','C','D'],['Apple','Ball','Cat'],strict=True))Traceback(mostrecentcallast):...ValueError:zip()argument1islongerthanargument2(3)读取-onlyviewofdictionary字典的三个键方法keys()、values()和items()返回类似集合的对象,这些对象分别对应于字典的键、值和项目的动态视图。您在这两个视图中所做的任何更改也将反映在原始词典中。在Python3.10中,从上述三个方法返回的所有视图都将有一个称为映射的附加属性,它将返回该映射的只读代理。这个只读代理将包装视图引用的原始字典。下面的示例说明了这一点:让我们定义一个字典并将其键和值存储在单独的变量中:>>>fruits={'Mangos':12,'Figs':100,'Guavas':3,'Kiwis':70}>>>keys=fruits.keys()>>>values=fruits.values()>>>list(keys)['Mangos','Figs','Guavas','Kiwis']现在,我们删除使用del语句从此字典中提取两个元素。如果您现在打印键和值,您会看到它只返回剩余的项目。原始字典中的更改现在将反映在视图中(此处为键和值)。>>>delfruits['无花果']>>>delfruits['番石榴']>>>print(list(keys),list(values))['Mangos','Kiwis'][12,70]现在,通过映射,您仍然可以取回原始字典的只读代理。凉爽的!它是#returnsaread-onlyproxyoftheoriginaldictionary>>>values.mappingmappingproxy({'Mangos':12,'Figs':100,'Guavas':3,'Kiwis':70})>>>values.mapping['Guavas']3(4)Aliassupportforabstractbaseclasses(ABCs)toeliminate一些向后兼容的集合模块将从Python3.10开始移除。所以现在是停止忽略相应的“弃用警告”并调整您的代码的好时机。截至目前,截至Python3.9.0b4(2020年7月3日发布),这些ABC中的任何一个都将直接从DeprecationWarning中的集合模块导入。>>>fromcollectionsimportABC_NameDeprecation警告:使用或导入ABCsfrom'collections'而不是从'collections.abc'是Python3.3以来的首选,而在3.9中它将停止工作这使我到本文结尾。随着Python3.10发布更多发行说明,我将继续将它们附加到本文中。敬请期待,让我们一起期待Python3.10。您可以在此处遵循当前和即将发布的版本的发布时间表:3.8、3.9、3.10。
