Uma estrutura de dados especializada que oferece suporte a operações de mesclagem eficientes e tem uma ordem de travessia definida. É comumente usado para acumular dados de dependências transitivas em regras e aspectos. Clique aqui para mais informações.
Os elementos de um depset precisam ser hasháveis e todos do mesmo tipo (conforme definido pela função type(x) integrada), mas os depsets não são apenas conjuntos de hash e não oferecem suporte a testes de associação rápidos. Se você precisar de um tipo de dados de conjunto geral, simule um usando um dicionário em que todas as chaves são mapeadas para True
.
Os conjuntos de dependências são imutáveis. Elas precisam ser criadas usando a função do construtor e mescladas ou aumentadas com outros depsets pelo argumento transitive
.
O parâmetro order
determina o tipo de travessia que é feito para converter o depset em um iterável. Há quatro valores possíveis:
"default"
(anteriormente"stable"
): a ordem não é especificada (mas é determinística)."postorder"
(anteriormente"compile"
): uma pós-ordenação da esquerda para a direita. Precisamente, isso percorre de maneira recursiva todas as crianças da esquerda para a direita e, em seguida, os elementos diretos da esquerda para a direita."preorder"
(anteriormente"naive_link"
): uma ordenação prévia da esquerda para a direita. Mais precisamente, ele percorre os elementos diretos da esquerda para a direita e, em seguida, percorre recursivamente os filhos da esquerda para a direita."topological"
(anteriormente"link"
): uma ordenação topológica da raiz até as folhas. Não há garantia de ordem.
Duas depsets só podem ser mescladas se ambas tiverem a mesma ordem ou se uma delas tiver a ordem "default"
. Nesse último caso, a ordem do depset resultante será a mesma do outro.
Os conjuntos de dependências podem conter valores duplicados, mas eles serão suprimidos ao iterar (usando to_list()
). Os valores duplicados podem interferir na semântica de ordenação.
Membros
to_list
list depset.to_list()Retorna uma lista dos elementos, sem duplicações, na ordem de travessia do depset. A ordem é indeterminada (mas determinística) para elementos que foram adicionados mais de uma vez ao depset. A ordem também não é especificada para depsets ordenados por
"default"
e para elementos de depsets filhos com ordem diferente da depset pai. A lista é uma cópia. Modificar a lista não afeta o depset e vice-versa.