Comprendre le mot-clé rendement en Python nécessite une familiarité avec les itérables et les générateurs.
Les itérables sont des objets comme des listes et des chaînes qui peuvent être itéré sur un élément à la fois.
Les générateurs sont des itérateurs qui produisent des valeurs une à la fois sans stocker la séquence entière en mémoire.
Le mot-clé rendement fonctionne comme une instruction return dans une fonction génératrice. Cependant, au lieu de terminer la fonction, elle suspend l'exécution et renvoie une valeur. Lorsque l'itérateur reprend, l'exécution continue là où elle s'était arrêtée.
Générateur :
def _get_child_candidates(self, distance, min_dist, max_dist): # Check if a left child exists and the distance is within range if self._leftchild and distance - max_dist < self._median: yield self._leftchild # Check if a right child exists and the distance is within range if self._rightchild and distance + max_dist >= self._median: yield self._rightchild
Cette fonction génératrice renvoie les nœuds enfants dans la distance spécifiée range.
Appelant :
result, candidates = [], [self] # Initialize empty result and candidates list while candidates: # Iterate while candidates are available node = candidates.pop() distance = node._get_dist(obj) if distance <= max_dist and distance >= min_dist: # Check distance range result.extend(node._values) candidates.extend(node._get_child_candidates(distance, min_dist, max_dist)) # Add children to candidates list return result
L'appelant initialise et parcourt une liste de nœuds candidats, en utilisant la fonction de générateur pour développer la liste de candidats tout en bouclant. Il vérifie la plage de distance et ajoute des nœuds enfants le cas échéant.
Le mot-clé rendement permet de contrôler l'épuisement du générateur. En définissant un indicateur pour arrêter l'itération, vous pouvez suspendre et reprendre l'accès aux valeurs du générateur.
Le module itertools fournit des fonctions pour manipuler les itérables. Par exemple, vous pouvez facilement créer des permutations d'une liste.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!