Personnellement, je n'aime pas la répétition d'initialisation thekey avant que la boucle while, puis à nouveau dans la boucle. C'est une source possible de bugs; que se passe-t-il si quelqu'un édite l'une des deux initialisations et oublie d'éditer l'autre? Même si cela ne se produit jamais, quiconque lit le code doit vérifier soigneusement que les deux initialisations correspondent parfaitement.
je l'écrire comme ceci:
while True:
thekey = random.choice(tree.thedict.keys())
subtree = tree.thedict[thekey]
if subtree.parent is not None and not subtree.isRoot:
break
post-scriptum Si vous voulez vraiment juste le sous-arbre, et ne se soucient pas de la clé nécessaire pour rechercher la sous-arborescence, vous pouvez même le faire:
while True:
subtree = random.choice(tree.thedict.values())
if subtree.parent is not None and not subtree.isRoot:
break
Certaines personnes peuvent ne pas aimer l'utilisation de « while True:
», mais qui est le idiome Python standard pour "boucle pour toujours jusqu'à ce que quelque chose fonctionne break
".À mon humble avis, c'est simple, clair, Python idiomatique.
P.P.S. Ce code devrait vraiment être enveloppé dans une instruction if qui vérifie que l'arbre a plus d'un nœud. Si l'arbre a seulement un nœud racine, ce code serait bouclé pour toujours.
Qu'essayez-vous exactement de faire? – freiksenet
Connaître le type des valeurs dans 'thedict' serait très utile. – Triptych
obtenir une sous-arborescence aléatoire qui n'est pas la racine. donc si le parent est none, ou que le flag 'isRoot' est vrai, je veux qu'il obtienne une autre clé aléatoire, puis vérifie-le –