depset

Informar un problema Ver código fuente Nocturno · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Es una estructura de datos especializada que admite operaciones de combinación eficientes y tiene un orden de recorrido definido. Se usa comúnmente para acumular datos de dependencias transitivas en reglas y aspectos. Para obtener más información, haz clic aquí.

Los elementos de un depset deben ser hashables y todos del mismo tipo (según lo define la función integrada type(x)), pero los depsets no son simplemente conjuntos 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 asignen a True.

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

El parámetro order determina el tipo de recorrido que se realiza para convertir el depset en un iterable. Existen cuatro valores posibles:

  • "default" (anteriormente "stable"): No se especifica el orden (pero es determinístico).
  • "postorder" (antes "compile"): Es un orden posterior de izquierda a derecha. Específicamente, esto recorre de forma recursiva 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, esto recorre los elementos directos de izquierda a derecha y, luego, recorre de forma recursiva 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 izquierda a derecha.

Solo se pueden combinar dos depsets 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 depset pueden contener valores duplicados, pero estos se suprimirán cuando se itere (con to_list()). Los duplicados pueden interferir en la semántica de ordenamiento.

Miembros

to_list

list depset.to_list()

Devuelve 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 determinístico) para los elementos que se agregaron más de una vez al depset. El orden tampoco se especifica para los conjuntos de dependencias ordenados con "default", ni para los elementos de los conjuntos de dependencias secundarios cuyo orden difiere del del conjunto de dependencias principal. La lista es una copia, por lo que modificarla no tiene ningún efecto en la depset y viceversa.