Maison > développement back-end > Tutoriel Python > Comment le mot clé « rendement » de Python crée-t-il des itérateurs efficaces dans les fonctions de générateur ?

Comment le mot clé « rendement » de Python crée-t-il des itérateurs efficaces dans les fonctions de générateur ?

Barbara Streisand
Libérer: 2024-12-25 17:44:10
original
244 Les gens l'ont consulté

How Does Python's `yield` Keyword Create Efficient Iterators in Generator Functions?

Que fait le mot-clé "yield" en Python ?

Le mot-clé "yield" de Python est utilisé dans les fonctions génératrices, qui sont des fonctions spéciales qui agissent comme des itérateurs.

Fonctions du générateur et Itérateurs

  • Itérateurs : objets qui produisent une séquence de valeurs une à la fois.
  • Fonctions génératrices : fonctions qui renvoient un itérateur au lieu d'une valeur spécifique. Ils utilisent le mot-clé "yield" pour générer des valeurs à la demande.

Fonctionnalité de "yield"

Lorsqu'une fonction génératrice est appelée :

  • La fonction générateur n'exécute pas son code immédiatement.
  • Au lieu de cela, elle renvoie un générateur objet.
  • Cet objet générateur est l'itérateur qui produit des valeurs.

Lorsqu'un itérateur est utilisé dans une boucle 'for' :

  • Le premier Chaque fois que la boucle rencontre une instruction "yield", la fonction génératrice reprend son exécution et renvoie sa première valeur.
  • Suivant les itérations de la boucle provoquent la reprise de la fonction génératrice et produisent les valeurs suivantes jusqu'à ce qu'il ne reste plus de valeurs.
  • La fonction génératrice se termine lorsqu'elle atteint la fin de sa logique ou rencontre une instruction "return".

Explication du code exemple

L'extrait de code donné définit une fonction génératrice appelée _get_child_candidates dans la classe de nœuds.

  • La fonction prend les paramètres distance, min_dist et max_dist.
  • Elle donne les nœuds enfants gauche et droit si leurs distances répondent aux critères.
  • Si plus aucun enfant ne répond aux critères, la fonction génératrice se termine.

Dans le code de l'appelant :

  • le résultat est initialisé comme une liste vide.
  • les candidats sont initialisés comme une liste contenant l'objet nœud actuel.
  • La boucle parcourt les candidats .
  • Pour chaque nœud, il vérifie la distance et ajoute ses valeurs au résultat s'il répond aux critères.
  • Il étend ensuite les candidats avec les nœuds enfants obtenus à partir du générateur _get_child_candidates.
  • La boucle continue jusqu'à ce que tous les nœuds enfants aient été traités.

Avantages des générateurs

  • Efficacité de la mémoire : les générateurs ne le font pas stocke toutes les valeurs en mémoire, contrairement aux listes.
  • Évaluation paresseuse : les valeurs sont calculées uniquement lorsque le générateur est itéré, ce qui réduit la surcharge de calcul.
  • Contrôle avancé de l'itération : vous pouvez contrôler la génération de valeurs en utilisant la logique au sein de la fonction générateur.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal