Python 3.x 从集合导入容器和从集合.abc导入容器之间的差异
我们可以通过两种方式导入Python 3.x 从集合导入容器和从集合.abc导入容器之间的差异,python-3.x,abc,Python 3.x,Abc,我们可以通过两种方式导入容器: 来自集合导入容器 from collections.abc导入容器 帮助函数用于两个容器返回相同的文档 帮助(collections.Container): 帮助(collections.abc.Container): 这两种进口商品有什么区别?为什么我们可以同时做这两件事 更新 从集合导入容器时收到弃用警告(Python 3.7.3) 从python3.8不能直接从集合导入它 >>> from collections import Contai
容器
:
来自集合导入容器
from collections.abc导入容器
帮助
函数用于两个容器
返回相同的文档
帮助(collections.Container)
:
帮助(collections.abc.Container)
:
这两种进口商品有什么区别?为什么我们可以同时做这两件事
更新
从集合导入容器时收到弃用警告(Python 3.7.3
)
从python3.8
不能直接从集合导入它
>>> from collections import Container
main:1:不推荐使用警告:不推荐使用“collections”而不是“collections.abc”来使用或导入abc,并且在
3.8它将停止工作
从:
在版本3.3中更改:已移动
到
模块。为了向后兼容,它们仍然可见
在本模块中,通过Python 3.7。
随后,它们将被完全移除
这些“集合抽象基类”目前包括
AsyncGenerator
,AsyncIterable
,AsyncIterator
,可等待
,
Bytestring
,Callable
,Collection
,Container
,corroutine
,
生成器
,哈希表
,项目视图
,可编辑
,迭代器
,键视图
,
映射
,映射视图
,可变映射
,可变序列
,
可变表集
,可逆
,顺序
,设置
,大小
,值视图
在Python3.8中,从集合导入它们将停止工作。
在Python3.3到3.7中,可以从集合
或
从collections.abc
(它给出了完全相同的类)。
在Python3.7中,从集合导入它们将打印
弃用警告,因为Python 3.8即将发布
在Python 2中,它们只能从“集合”导入,
不是来自“collections.abc”
处理此问题的一种简单方法是使用try/except块:
try: # works in Python >= 3.3
from collections.abc import Sequence
except ImportError: # Python 2, Python <= 3.2
from collections import Sequence
此布尔值通常使用six
获得:
from six import PY2
from six import PY3
或使用系统版本信息
:
import sys
PY2 = int(sys.version_info[0]) == 2
import sys
PY3 = int(sys.version_info[0]) == 3
如果我们预期Python4可能会像Python3.3一样工作+
在这方面,Python 2的特殊外壳似乎更适合未来
而不是特殊的套管Python 3,可以按如下方式进行:
if PY3:
from collections.abc import Sequence
else:
from collections import Sequence
其中,PY3
布尔值可以使用six
获得:
from six import PY2
from six import PY3
或使用系统版本信息
:
import sys
PY2 = int(sys.version_info[0]) == 2
import sys
PY3 = int(sys.version_info[0]) == 3
不过,上面的try/except方法似乎更稳健
(例如,它与Python3.2一起工作,无需额外努力)