我正在查看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"""


例如,举例说明,对于IOBTreeIIBTree模块,设置值都是整数。因此,IOBTree.TreeSetIIBTree.TreeSet基本上相同。

然后,package documentation使用这些接口定义来自动生成API文档,包括per-module documentation with the (tree)set value details

关于python - BTrees:不同的TreeSet化身之间有区别吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24932797/

10-13 05:54