Maison > développement back-end > Tutoriel Python > Comment le mot-clé « rendement » de Python crée-t-il et gère-t-il des générateurs ?

Comment le mot-clé « rendement » de Python crée-t-il et gère-t-il des générateurs ?

DDD
Libérer: 2024-12-21 08:51:09
original
474 Les gens l'ont consulté

How Does Python's `yield` Keyword Create and Manage Generators?

Que fait le mot-clé « rendement » en Python ?

Introduction

Comprendre le mot-clé rendement en Python nécessite une familiarité avec les itérables et les générateurs.

Iterables

Les itérables sont des objets comme des listes et des chaînes qui peuvent être itéré sur un élément à la fois.

Générateurs

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.

Rendement

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.

Votre code expliqué

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
Copier après la connexion

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
Copier après la connexion

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.

Utilisation avancée du générateur

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.

Itertools

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal