对于 Python 爱好者来说, 显然, 有趣的时代即将到来. 浏览三个版本 (3.8,3.9 和 3.10) 的发布时间表, 敦促我在即将到来的有趣的 Python 开发时间表中编制关键日期.
"我妈妈总是说生活就像一盒巧克力。 你永远都不知道会得到什么。" - 阿甘 |
通常, 在开发周期中会有 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 方法. 以下示例对此进行了说明:
- # 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 之前, 如果要压缩两个不等长的列表, 则将得到长度等于较小列表的输出.
如以下示例所示, 在 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 开始删除. 因此, 现在是停止忽略相应的 "弃用警告" 并改编代码的好时机.
- >>> 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
来源: http://developer.51cto.com/art/202007/622015.htm