depset

Denuncia un problema Ver fuente Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Es una estructura de datos especializada que admite operaciones de combinación eficientes y tiene un orden de recorrido definido. Se usa con frecuencia para acumular datos de dependencias transitivas en reglas y aspectos. Para obtener más información, consulta este artículo.

Los elementos de un conjunto de dependencias deben ser hashables y todos del mismo tipo (como lo define la función type(x) integrada), pero los conjuntos de dependencias no son solo conjuntos de hash y no admiten pruebas de membresía rápidas. Si necesitas un tipo de datos de conjunto general, puedes simular uno con un diccionario en el que todas las claves se asignan a True.

Los depsets son inmutables. Se deben crear con su función de constructor y combinarse o aumentarse con otros conjuntos de dependencias a través del argumento transitive.

El parámetro order determina el tipo de recorrido que se realiza para convertir el conjunto de dependencias en un elemento iterable. Hay cuatro valores posibles:

  • "default" (anteriormente "stable"): El orden no se especifica (pero es determinista).
  • "postorder" (anteriormente "compile"): Es un orden posterior de izquierda a derecha. Específicamente, recorre recursivamente todos los elementos secundarios de izquierda a derecha y, luego, los elementos directos de izquierda a derecha.
  • "preorder" (anteriormente "naive_link"): Es un pedido por adelantado de izquierda a derecha. Específicamente, recorre los elementos directos de izquierda a derecha y, luego, recorre recursivamente los elementos secundarios de izquierda a derecha.
  • "topological" (anteriormente "link"): Es un ordenamiento topológico desde la raíz hasta las hojas. No hay garantía de que se realice de izquierda a derecha.

Solo se pueden combinar dos conjuntos de dependencias si ambos tienen el mismo orden o si uno de ellos tiene el orden "default". En el último caso, el orden del depset resultante será el mismo que el del otro.

Los conjuntos de dependencias pueden contener valores duplicados, pero estos se suprimirán cuando se itere (con to_list()). Los duplicados pueden interferir con la semántica del orden.

Miembros

to_list

list depset.to_list()

Muestra una lista de los elementos, sin duplicados, en el orden de recorrido del depset. Ten en cuenta que el orden no se especifica (pero es determinista) para los elementos que se agregaron más de una vez al conjunto de dependencias. El orden tampoco se especifica para los conjuntos de dependencias ordenados por "default" ni para los elementos de conjuntos de dependencias secundarios cuyo orden difiere del del conjunto de dependencias superior. La lista es una copia; modificarla no tiene efecto en el conjunto de dependencias y viceversa.