Itérateurs et générateurs en Python : quand utiliser lesquels ?

Linda Hamilton
Libérer: 2024-11-25 19:16:11
original
657 Les gens l'ont consulté

Iterators vs. Generators in Python: When to Use Which?

Générateurs et itérateurs en Python

Les itérateurs et les générateurs de Python sont tous deux itérables, mais ils diffèrent par leur implémentation et leurs cas d'utilisation.

Itérateurs

Itérateurs sont des objets itérables qui fournissent une interface pour parcourir une séquence d'éléments. Ils ont deux méthodes principales :

  • __iter__ : renvoie l'itérateur lui-même, lui permettant d'être itéré plusieurs fois.
  • __next__ : renvoie l'élément suivant de la séquence. Augmenter StopIteration lorsqu'il ne reste plus d'éléments.

Générateurs

Les générateurs sont un type spécial d'itérateur qui utilise le mot-clé rendement pour générer des valeurs à la volée . Lorsqu'elle est appelée, une fonction génératrice renvoie un objet générateur qui peut être itéré.

En interne, un générateur stocke un état d'exécution suspendu qui garde une trace de la position actuelle dans l'itération. Lors d'une itération sur un générateur, la méthode __next__ reprend la fonction suspendue et génère la valeur suivante. L'exécution est ensuite à nouveau suspendue jusqu'à l'itération suivante.

Cas d'utilisation

  • Utiliser des itérateurs :

    • Lorsque vous devez conserver l'état à travers les itérations (par exemple, un itérateur personnalisé avec des comportement).
    • Lorsque vous devez exposer des méthodes supplémentaires en plus de l'itération (par exemple, une classe avec les méthodes current() et next()).
  • Utilisez des générateurs :

    • Quand la simplicité et l'efficacité sont des priorités.
    • Quand vous souhaitez générer des valeurs paresseusement, sans stocker de liste intermédiaire.
    • Lorsque vous souhaitez suspendre et reprendre l'itération (par exemple, suspendre un calcul pour une utilisation ultérieure).

Exemple

Considérons la fonction suivante qui génère des nombres carrés pour un donné range :

def squares(start, stop):
    for i in range(start, stop):
        yield i * i
Copier après la connexion

Cette fonction crée un générateur qui produit des nombres carrés un par un. C'est plus efficace qu'une compréhension de liste ou un itérateur personnalisé, car cela évite de créer une liste intermédiaire de toutes les valeurs au carré.

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