我正在查看BTrees库,并注意到有多个TreeSet
(及其他)类,例如BTrees.IOBTree.TreeSet
BTrees.OOBTree.TreeSet
BTrees.LFBTree.TreeSet
...
我知道BTree
类对于每种类型都是不同的,因为它接受键和值的不同类型,但是TreeSet
类又如何呢?
尽管经过反复试验,我发现第一个字母指示TreeSet
实例可以保留哪些类型,但是第二个字母又如何呢?这对成员的存储/检索方式有什么影响?
是否有任何文档?
最佳答案
不,TreeSet
类忽略第二个字母;每个XXBTree
模块中都提供了它们,以确保完整性和易于导入。
在幕后,使用了大量富有创造力的预处理器宏工作来创建模块,这也使得为每个键值类型变体生成TreeSet
类型变得更加容易。
软件包文档部分依赖interface definitions;每个模块都有一个接口,其中第一句话记录了该程序包中包含的内容:
class IIntegerObjectBTreeModule(IBTreeModule, IMerge):
"""keys, or set values, are integers; values are objects.
describes IOBTree and LOBTree"""
和
class IIntegerIntegerBTreeModule(IBTreeModule, IIMerge, IMergeIntegerKey):
"""keys, or set values, are integers; values are also integers.
describes IIBTree and LLBTree"""
例如,举例说明,对于
IOBTree
和IIBTree
模块,设置值都是整数。因此,IOBTree.TreeSet
和IIBTree.TreeSet
基本上相同。然后,package documentation使用这些接口定义来自动生成API文档,包括per-module documentation with the (tree)set value details。
关于python - BTrees:不同的TreeSet化身之间有区别吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24932797/