偏移

报告问题 查看源代码 每夜版 · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

一种支持高效合并操作且具有明确遍历顺序的专用数据结构。通常用于在规则和方面中累积来自传递依赖项的数据。如需了解详情,请参阅此处

deps 的元素必须可哈希,并且必须属于同一类型(由内置的 type(x) 函数定义),但 deps 并非简单的哈希集,也不支持快速成员资格测试。如果您需要常规的集合数据类型,可以使用所有键都映射到 True 的字典来模拟一个。

depset 是不可变的。应使用其构造函数创建它们,并通过 transitive 实参与其他 depsets 合并或扩充。

order 参数用于确定将 depset 转换为可迭代对象时所采用的遍历类型。有以下四种可能的值:

  • "default"(之前为 "stable"):顺序未指定(但具有确定性)。
  • "postorder"(之前为 "compile"):从左到右的后排序。具体而言,此方法会以递归方式遍历所有子元素(从最左侧开始),然后遍历直接元素(从最左侧开始)。
  • "preorder"(之前为 "naive_link"):从左到右的预排序。具体而言,此方法会先从最左侧开始遍历直接元素,然后从最左侧开始以递归方式遍历子元素。
  • "topological"(之前为 "link"):从根到叶的拓扑排序。不保证从左到右。

只有当两个 depsets 具有相同的顺序,或者其中一个具有 "default" 顺序时,才能合并这两个 depsets。在后一种情况下,生成的 depset 的顺序将与另一个 depset 的顺序相同。

depset 可能包含重复值,但在迭代(使用 to_list())时,这些重复值会被抑制。重复值可能会干扰排序语义。

成员

to_list

list depset.to_list()

返回一个列表,其中包含 depset 中的元素(不含重复项),并按 depset 的遍历顺序排列。请注意,对于多次添加到 depset 中的元素,其顺序是不确定的(但具有确定性)。对于 "default"-ordered depsets,以及子 depset 中顺序与父 depset 不同的元素,顺序也是未指定的。该列表是一个副本;修改该列表对 depset 没有影响,反之亦然。