python multi-tree import treelib / classe 'générateur' méthodes de traitement
connaissances: treelib import multi-arbre
Un récent projet utilise python multi-package dans la fourche de l'arbre, est très pratique.
- installer
# windows
pip install treelib
# linux
sudo easy_install -U treelib
- L'utilisation officielle de l'appel fonction Description: https://treelib.readthedocs.io/en/latest/treelib.html?
# 示例:
import treelib
from treelib import Tree, Node
class Nodex(object):
def __init__(self,x,y):
self.sit = [x,y]
tree = Tree()
tree.create_node('a', 1, data = Nodex(1,1))
tree.create_node('b', 2, parent = 1, data = Nodex(1,2))
tree.create_node('c', 3, parent = 1, data = Nodex(1,3))
tree.create_node('d', 4, parent = 2, data = Nodex(3,4))
tree.show()
tree.show(data_property = 'sit') #按data里的sit变量显示
#输出:
a
├── b
│ └── d
└── c
[1, 1]
├── [1, 2]
│ └── [3, 4]
└── [1, 3]
connaissances: générateur générateur
Là fonctions treelib Rsearch (JNV, filtre = None), son rôle est de trouver le chemin vers le nœud racine.
rsearch(nid, filter=None)
# Traverse the tree branch along the branch from nid to its ancestors (until root).
# Parameters:filter – the function of one variable to act on the Node object.
Mais nous trouverons un appel direct, cette fonction retourne une valeur non liste, mais <class « générateur »>
a=tree.rsearch(4, filter=None)
print(a)
print(type(a))
#输出
<generator object Tree.rsearch at 0x0000000004F8D2C8>
<class 'generator'>
Parce que le générateur est généré sur la demande et les résultats « retour », au lieu d'une seule fois produit toutes les valeurs de retour, et parfois ne savent tout simplement pas toutes les valeurs de retour.
générateur est stocké algorithme, chaque appel à la suivante () , pour calculer la valeur de l'élément suivant, pour calculer le temps jusqu'à ce que le dernier élément, pas d'éléments, lancer StopIteration erreurs.
Pour imprimer les résultats Rsearch (JNV, filtre = None), vous devez utiliser la méthode de traitement d'un producteur.
a=tree.rsearch(4, filter=None)
p=[]
while True:
try:
p.append(next(a))
except StopIteration as e:
break
print(p)
#输出
[4, 2, 1]
Ce blog est une œuvre originale, a salué la direction, reproduit, s'il vous plaît indiquer la source, joindre un lien vers cet article, je vous remercie