Table des matières
Quelle est la différence entre un itérateur et un générateur?
Quand devriez-vous utiliser des générateurs au lieu de listes?
Comment construisez-vous des itérateurs personnalisés?
Conseils et gotchas lorsque vous travaillez avec des générateurs
Maison développement back-end Tutoriel Python Générateurs Python et itérateurs plongée profonde

Générateurs Python et itérateurs plongée profonde

Jul 03, 2025 am 01:36 AM
python

Générateurs Python et itérateurs plongée profonde

Si vous avez déjà rencontré des problèmes de mémoire tout en travaillant avec de grands ensembles de données dans Python ou si vous vouliez un moyen plus propre de gérer les séquences, les générateurs et les itérateurs pourraient être exactement ce dont vous avez besoin. Il ne s'agit pas seulement d'économiser de la mémoire - ils peuvent rendre votre code plus lisible et efficace.

Générateurs Python et itérateurs plongée profonde

Décomposons ce que vous devez vraiment savoir lorsque vous travaillez avec ces deux concepts étroitement liés mais distincts.

Générateurs Python et itérateurs plongée profonde

Quelle est la différence entre un itérateur et un générateur?

C'est l'une des questions les plus courantes lors de la plongée dans les outils d'itération de Python.

Un itérateur est tout objet qui met en œuvre le protocole d'itérateur ( __iter__() et __next__() ) et vous permet de parcourir les éléments un à la fois. Les listes, les dictionnaires et les chaînes sont tous itérables car ils renvoient un itérateur lorsque vous appelez iter() sur eux.

Générateurs Python et itérateurs plongée profonde

Un générateur , en revanche, est un type d'itérateur spécial que vous définissez en utilisant une fonction avec yield au lieu du return . Vous n'avez pas à implémenter manuellement __next__() —Python gère cela pour vous dans les coulisses.

Donc, en bref:

  • Tous les générateurs sont des itérateurs.
  • Tous les itérateurs ne sont pas des générateurs.

Par exemple:

 def simple_generator ():
    rendement 1
    rendement 2

gen = simple_generator ()
print (suivant (gen)) # sortie: 1
imprimer (suivant (gen)) # sortie: 2

Si vous avez affaire à de grands flux de données ou si vous souhaitez une évaluation paresseuse, les générateurs vous offrent un moyen propre et économe en mémoire de le faire.


Quand devriez-vous utiliser des générateurs au lieu de listes?

Utilisez des générateurs lorsque:

  • Vous travaillez avec de grands ensembles de données et n'avez pas besoin de tous les éléments en mémoire à la fois.
  • Vous construisez un pipeline où les données circulent d'une transformation à une autre.
  • Vous souhaitez éviter des calculs inutiles jusqu'à ce qu'ils soient nécessaires.

Imaginez lire un énorme fichier journal ligne par ligne. Le chargement de l'ensemble du fichier dans une liste avec readlines() pourrait manger rapidement de la mémoire. Au lieu de cela, l'utilisation d'une expression de générateur ou d'une fonction de générateur vous permet de traiter chaque ligne au fur et à mesure.

Voici une comparaison simple:

 # Utilisation d'une liste (charge tout en même temps)
avec open ('big_file.txt') comme f:
    lignes = f.readlines () # charge toutes les lignes en mémoire

# Utilisation d'un générateur (lit ligne par ligne)
avec open ('big_file.txt') comme f:
    lignes = (line.strip () pour la ligne en f) # traite une ligne à la fois

Vous ne remarquerez pas une grande différence avec de petits fichiers, mais la deuxième approche évolue mieux et maintient votre application légère.


Comment construisez-vous des itérateurs personnalisés?

Parfois, les iterables intégrés ne sont pas suffisants et vous souhaitez créer votre propre comportement personnalisé. C'est là que l'écriture d'une classe Iterator personnalisée est utile.

Pour en faire un, vous devrez définir au moins deux méthodes:

  • __iter__() - Renvoie l'objet Iterator lui-même.
  • __next__() - Renvoie la valeur suivante. S'il n'y a plus d'articles, cela devrait augmenter StopIteration .

Voici un exemple de base d'un compteur qui passe de 1 à un numéro donné:

 compteur de classe:
    def __init __ (self, limite):
        self.limit = limite
        self.current = 1

    def __iter __ (soi):
        se retourner

    def __Next __ (self):
        Si self.current> self.limit:
            augmenter la pertinence
        autre:
            valeur = self.Current
            self.current = 1
            valeur de retour

pour num dans le compteur (5):
    imprimer (num)

Cela vous donne un contrôle total sur le comportement de l'itération. Il est utile lorsque vous avez besoin d'une logique d'itération avec état qui n'est pas facile à exprimer avec une fonction générateur seule.


Conseils et gotchas lorsque vous travaillez avec des générateurs

Les générateurs sont puissants, mais ils viennent avec des bizarreries que vous devez garder à l'esprit:

  • ? Une fois consommés, les générateurs ne réinitialisent pas. Si vous devez réutiliser les valeurs, les stocker d'abord dans une liste.
  • ⚠️ Les générateurs ne prennent pas en charge l'indexation. Ainsi, des choses comme my_gen[0] ne fonctionneront pas.
  • ? Vous pouvez construire des pipelines en utilisant plusieurs générateurs enchaînés. Par exemple, filtrez → Transformer → Sortie.
  • ? Les générateurs infinis sont possibles, mais les utilisent uniquement lorsque vous avez une condition d'arrêt claire en dehors du générateur.

Voici un exemple rapide de deux expressions de générateur:

 nombres = (x pour x dans la gamme (100))
evens = (x pour x en nombre si x% 2 == 0)
carré = (x * x pour x dans evens)

Pour Val en carré:
    Imprimer (Val)

Il s'agit d'un moyen propre de structurer les transformations sans tout charger en mémoire.


L'utilisation efficace des générateurs et des itérateurs peut enregistrer la mémoire, améliorer les performances et conduire à un code plus maintenable. Que vous traitiez des journaux, en streaming ou en nettoyant simplement les boucles, en sachant quand et comment les utiliser fait une réelle différence.

Et c'est à peu près tout - vous n'avez pas besoin de trucs de fantaisie pour en tirer le meilleur parti. Juste une solide compréhension de la façon dont ils travaillent sous le capot.

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!

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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1535
276
Comment automatiser la saisie de données d'Excel à un formulaire Web avec Python? Comment automatiser la saisie de données d'Excel à un formulaire Web avec Python? Aug 12, 2025 am 02:39 AM

La méthode de remplissage des données Excel dans les formulaires Web à l'aide de Python est: utilisez d'abord des pandas pour lire les données Excel, puis utilisez le sélénium pour contrôler le navigateur pour remplir et soumettre automatiquement le formulaire; Les étapes spécifiques incluent l'installation de bibliothèques Pandas, OpenPyxl et Selenium, en téléchargeant le pilote de navigateur correspondant, en utilisant des pandas pour lire le nom, le courrier électronique, le téléphone et d'autres champs dans le fichier data.xlsx, le lancement du navigateur via le sélénium pour ouvrir la page Web cible, localiser les éléments de formulaire et remplir le traitement de données, en utilisant le formulaire Web pour traiter le contenu dynamique, ajouter le contenu de la charge dynamique, ajouter un traitement exception et traiter toutes les lignes de données dans une boucle.

Qu'est-ce que l'analyse des sentiments dans le trading des crypto-monnaies? Qu'est-ce que l'analyse des sentiments dans le trading des crypto-monnaies? Aug 14, 2025 am 11:15 AM

Table des matières Qu'est-ce que l'analyse des sentiments dans le trading des crypto-monnaies? Pourquoi l'analyse des sentiments est importante dans l'investissement des crypto-monnaies sources clés de données d'émotion a. Plateforme de médias sociaux b. Médias d'information c. Outils pour l'analyse des sentiments et la technologie Utilisé couramment des outils dans l'analyse des sentiments: Techniques adoptées: intégrer l'analyse des sentiments dans les stratégies de trading comment les traders l'utilisent: Exemple de stratégie: supposer le scénario de trading BTC Réglage du scénario: Signal émotionnel: interprétation des commerçants: Décision: Résultats: Limitations et risques de l'analyse des sentiments en utilisant de plus en plus les émotions pour le commerce des crypto-oreilles. Une récente étude en 2025 de Hamid

Comment gérer les grands ensembles de données dans Python qui ne rentrent pas dans la mémoire? Comment gérer les grands ensembles de données dans Python qui ne rentrent pas dans la mémoire? Aug 14, 2025 pm 01:00 PM

Lors du traitement de grands ensembles de données qui dépassent la mémoire dans Python, ils ne peuvent pas être chargés en RAM en même temps. Au lieu de cela, des stratégies telles que le traitement de la chasse, le stockage du disque ou le streaming doivent être adoptées; Les fichiers CSV peuvent être lus en morceaux via les paramètres ChunkSize de Pandas et le bloc traité par bloc. La daste peut être utilisée pour réaliser la parallélisation et la planification des tâches similaires à la syntaxe Pandas pour prendre en charge les opérations de données de mémoire importantes. Écrivez les fonctions du générateur pour lire les fichiers texte ligne par ligne pour réduire l'utilisation de la mémoire. Utilisez le format de stockage en colonne de parquet combiné avec Pyarrow pour lire efficacement des colonnes ou des groupes de lignes spécifiques. Utilisez Memmap de Numpy pour mapper la mémoire de grands tableaux numériques pour accéder aux fragments de données à la demande, ou stocker des données dans des données légères telles que SQLite ou DuckDB.

Comment déboguer votre code python Comment déboguer votre code python Aug 13, 2025 am 12:18 AM

Useprint () instructionSOcheckVariableValuesAndexEcutionflow, ajoutlabelsandtypesforclarity, andRemoveThembeForComting; 2.Ushepylepylebugger (pdb) withreakpoint () topauseeexecution, inspectvariables, andstepthroughcodeinteractive; 3.HandleExceptionsusin;

Comment déboguer le code Python dans le texte sublime? Comment déboguer le code Python dans le texte sublime? Aug 14, 2025 pm 04:51 PM

UsuBrimeText’sBuildSystemTorunpyThonscriptsandcatcherRorSpressingCtrl baftersettingthecorrectBuildSystemorCreatacustomone.2.InsertStrategicprint () StatementScocheckVariableValues, Types, etxExecutionflow, usingLabelSAndrepr () Forclarit

Comment exécuter le code Python dans le texte sublime? Comment exécuter le code Python dans le texte sublime? Aug 16, 2025 am 04:58 AM

Assurez-vous que Python est installé et ajouté au chemin du système, exécutez Python - Version ou Python3 - Version Version via le terminal; 2. Enregistrez le fichier Python en tant qu'extension .py, comme Hello.py; 3. Créez un système de construction personnalisé dans sublimeText, les utilisateurs de Windows utilisent {"CMD": ["Python", "- U", "$ File"]}, les utilisateurs de macOS / Linux utilisent {"CMD": ["Python3

Comment aplatir une liste imbriquée ou une liste de listes dans Python Comment aplatir une liste imbriquée ou une liste de listes dans Python Aug 12, 2025 am 09:49 AM

AplatinganestestListInpyThonConvertsalist avec les publistiquesIntoasingleflatlist et ThebestMethDependSonTherestDepthanddatasize.forone-levelnesting, uselistcomprehensionliny

Comment déboguer un script python dans vscode Comment déboguer un script python dans vscode Aug 16, 2025 am 02:53 AM

Pour déboguer Python Scripts, vous devez d'abord installer l'extension Python et configurer l'interprète, puis créer un fichier lancé.json pour définir la configuration de débogage, puis définir un point d'arrêt dans le code et appuyez sur F5 pour démarrer le débogage. Le script sera interrompu au point d'arrêt, permettant de vérifier les variables et l'exécution étape par étape. Enfin, en vérifiant le problème en affichant la sortie de la console, en ajoutant des journaux ou en ajustant les paramètres, etc., pour s'assurer que le processus de débogage est simple et efficace après la correction de l'environnement.

See all articles