Skip to main content

Aujourd'hui est un sujet de Python lundi, donnant à tous les membres de Python Builder et Itérateur . Quand j'ai appris à la première fois une boucle et le créateur, je me fiche de trop, pensez simplement que c'est une nouvelle façon d'obtenir des données. Pour obtenir des données, nous suffirons. Mais en utilisant Python plus tard et en utilisant Tensorflow, j'ai trouvé que de nombreux places utilisaient des boucles et des générateurs, ou utilisent directement ou apprennent des idées. Aujourd'hui, regardons de plus près, ce qui se passe.


D'abord, nous allons commencer par

Itérateur

, itératif n'est pas un concept python unique, oui Itérateur en C ++ et Java et l'utilisation de deux sont similaires. Répondre qui traite principalement d'un problème dans une scène complexe, comment récupérer les données autant que possible.

Supposons une scène, pensant que nous recevons une série de données de la source de données. AprèsCela, nous devons appeler 10 000 générations pour créer des résultats. Après avoir reçu le résultat, nous devons donner les données restantes pour un autre appel. Ce processus semble très populaire, mais cachez les deux questions, la première question est que si nous pouvons garantir le processus pour la première fois, chaque fois que nous utilisons 10 000 et si nous utilisons le nombre de personnes qui sont sur la valeur active? De toute évidence, nous avons besoin d'une variable pour enregistrer la quantité de données que nous avons utilisée et l'état de ce lot de données. Deuxièmement, si cette quantité de données est grande, il y aura un problème avec
Transfert de données

Chaque fois que nous devons surmonter une grande quantité de données, nous consommerons beaucoup de ressources. Il existe également une scène si nous développons une structure de données plus complexe

, telle qu'un cyklore, en aval, vous souhaitez y passer, vous devez comprendre que le principe de mise en œuvre n'est que. Ceci est évidemment hostile. L'apparition d'itérateur est pour ces problèmes. Sa signification est également très simple. Ça gC'est comme le curseur utilisé par
CURL "lorsque nous traversons la liste

Pointez toujours sur l'emplacement actuel, sait toujours où la position suivante est. Théractor Cinq, conteneur

Commençons à comprendre des réponses de composants simples, nous connaissons tous des conteneurs en python: liste, tuple et dict. Ils sont tous des crosses de chevauchement, nous pouvons utiliser le mot-clé
ITER

directement pour obtenir l'itérateur correspondant

Prenez un exemple:

Il s'agit d'un exemple très classique, nous définissons d'abord un tableau, puis obtenir itérateur la lire via le mot clé ITER après avoir eu des itérateurs, nous pouvons obtenir l'élément suivant de la boucle. Par le prochain mot clé. Nous appelons les deux fois suivants, le résultat de la première sortie est de 1, le second résultat est 3. Comme nous venons de le dire, nous appelons chaque fois, il prendra automatiquement avancer, saisira une des données suivantes. C'est quelque chose cRemarque, car seulement 5 éléments de la matrice que nous avons créés, si nous l'appelons plus de 5 fois, l'interprète de Python sera lancé

.

Outre l'utilisation suivante, nous pouvons également utiliser la boucle pour la répéter:

arr = [1, 3, 4, 5, 9]it = iter(arr)print(next(it))print(next(it))

Comment utiliser la même chose que nous utilisons pour répéter l'élément.


Itérateur personnalisé L'utilisation de l'itérateur officiel est beaucoup, ni son utilisation principale, son utilisation la plus importante de nous créer vous-même


. Comme l'idée d'introduire des arrangements personnalisés Python, nous pouvons ajouter __iter__ méthode en classe.
for i in it: print(i) Dans laquelle la méthode __iter__ est utilisée pour initialiser et renvoyer les processus de répétition et l'expliquer plus complexe. Il y a deux concepts en python, on peut être utilisé, un itérateur. Le protocole Spécifie la méthode de __ir __IR__ astrable pour renvoyer un élément. La boucle elle-même est également un objet passionnant,Naturellement également besoin de mettre en œuvre la méthode __iter__.

Je sais que je ne peux pas comprendre cela, je donnerai un exemple, comme les employés et les chefs, les employés qui n'ont pas d'autorités pour approbation, ne peuvent être transférés que sur le patron. Nous comparons nos employés dans des objets, des métaphores de patron dans Itératrice. Si l'employé a un problème, il n'ya aucune autorisation de le gérer et ne peut trouver que le patron de décider. C'est-à-dire que la décision finale est le patron, mais si c'est la question du patron, il peut le résoudre lui-même, sans avoir à trouver d'autres personnes. Ainsi, lorsque nous appelons __iter__ de ITER, vous obtiendrez un itérateur, ce qui signifie que vous appelez le personnel pour revenir au patron, puis répété en appelant __ext__ d'itérateur.

Il est clair ici, seulement iterat ou a une méthode __Next____ et peut calculer non et __iter__ renvoie un élément. Cependant, nous définissons c'était itérateur, c'était aussi un objet passionnant,Alors, revenez à vous-même lorsque vous appelez __itor__. __Next__ La méthode simple, correspondant à la méthode d'itération suivante, est utilisée pour renvoyer l'élément d'itération suivant.

Prenons l'exemple:

Il s'agit d'une boucle qui crée 2 sources, nous nous prenons dans __iter__ initialiser à 0, puis retournez eux-mêmes. Dans __Xext__, il est évalué qu'il n'y a pas de finition répétitive et s'il se termine, une exception est lancée.


Veuillez utiliser son exemple:
Nous pouvons également utiliser des boucles pour le répéter:

Itérateur en plus de répéter un conteneur ou d'une autre manière utilisée pour Personnalisez la méthode d'itération, il peut être utilisé pour répéter le générateur. Voyons le concept de générateurs ensemble.

Lundi, émetteur class PowTwo: """Class to implement an iterator of powers of two""" def __init__(self, max = 0): self.max = max def __iter__(self): self.n = 0 return self def __next__(self): if self.n <= self.max: result = 2 ** self.n self.n += 1 return result else: raise StopIteration
Concept et itérateur de l'émetteur S'adapter à l'autre, Itérateur est un outil répétitif, la création de données de transmission et de données de création est un outil de création de données publics. FormeUn exemple très simple, si nous savons tous que le troisième numéro est égal à deux nombres du troisième numéro. Par exemple, nous souhaitons recevoir 1 million de fiboacci, dans une approche traditionnelle, nous devons ouvrir une longueur d'un million, puis calculer en fonction de la définition du numéro de Fibocie. De toute évidence, cela consommera beaucoup d'espace, existe-t-il un moyen de créer une méthode de création de données sous la forme d'itérateur et à chaque fois qu'il obtient le résultat suivant? De cette manière, la quantité de données que nous devons appeler, peut résoudre le problème de stockage. Voir Comment identifier un générateur.

Supports
La voie la plus simple est vraiment simple et nous créons une liste. En Python, nous initialisons souvent un tableau: >>> a = PowTwo(4)>>> i = iter(a)>>> next(i)1>>> next(i)2>>> next(i)4>>> next(i)8>>> next(i)16>>> next(i)Traceback (most recent call last):...StopIteration

Bien que nous mettions la boucle dans la définition de la liste, cela exécutera automatiquement la boucle interne, puis toute la boucle de résultat est écrite dans la liste de calcul de la liste suivante. Nous avons une déformation légère, obtenez un émetteur simple.

>>> for i in PowTwo(5):... print(i)... 12481632

Est-ce clair? En fait, il n'y a pas de différence dans la liste, mais nous allons changer les parenthèses extérieures de [] (. Cette méthode sera capable de comprendre, mais il peut y avoir un doute. Notre signification. Qu'est-ce que c'est la différence entre cette définition et [] ci-dessus?


C'est vraiment spécial, sans la différence, nous utilisons la génération d'énergie de la machine. Sa différence est la signification du générateur. De plus, nous avons dit en ce qui précède Lorsqu'une liste est identifiée, Python exécutera automatiquement une répétition de la boucle, puis d'enregistrer les résultats Entrez la liste. Mais le générateur ne le fait pas, bien que nous utilisions également une boucle pour la boucle, mais cela ne joue qu'après l'étape fait, Python ne se termine pas pour le cycle.

Seulement nous appelons ensuite, il active une boucle


Ne croyez pas aux camarades de classe, voir la différence entre les deux suivants. Déclarations:
Si la chose étrange se produit, s'il vous plaîtRevenez, pensez-y. arr = [i * 3 for i in range(10)]

Méthode de création de fonctions

g = (i * 3 for i in range(10))print(next(g)) Bien que le procédé décrit ci-dessus soit très simple, il est irréaliste, car plusieurs fois la structure de données que nous voulons qu'il sera plus compliqué, il est difficile d'afficher ce formulaire.
Donc, dans Python, Python nous donne une méthode pour construire un générateur, un peu comparé à un peu, mais c'est aussi très facile. Prenons un exemple:
Du code, nous semblons avoir identifié une fonction à un moment donné, il peut être compréhensible, mais le résultat qu'il renvoie n'est pas une valeur, c'est un
constructeur

[2] .


Si vous essayez vraiment, vous obtiendrez une instance du type générateur, également une instance de la création de Python.
g = (i for i in range(1000000000))g = [i for i in range(1000000000)] Regardez de plus près, vous trouverez des mots-clés dans cette fonction et rien disparu, il n'utilise plus, mais utilisez
produisant une productivité

La productivité et le profit sont surtout proches, mais certains différents.


Il en va de même pour renvoyer le contenu de la productivité après la production lorsque nous exécutons lorsque nous exécutons. Par exemple, le code ci-dessus est écrit pour apporter i, puis nous recevrons ceci i lorsque nous courons ensuite.

Différents endroits sont lorsque nous allons exécuter la prochaine fois,

continuera de la productivité finale

Certains sont similaires à vos mains lors du retour, la mise en oeuvre récursive de la tête de base est de retour à la couche supérieure. Donc, si nous voulons avoir plusieurs valeurs, vous devez utiliser une boucle dans l'onglet Créer. Par exemple:


Si nous effectuons le code ci-dessus, les trois premiers chiffres sont 0, 1 et 2, à partir du quatrième numéro, toujours 10. Si vous pouvez comprendre cet exemple, vous pouvez comprendre cet exemple,vous pouvez comprendre cet exemple, il doit comprendre le sens de la productivité. def gtr(n): for i in range(n): yield i
La productivité de

La productivité et la productivité seront également introduites de la même manière, mais également des résultats des résultats et de continuer à exécuter à partir de la position TRI est renvoyé lors de la suivi de la suivante. Mais il a un oncleT différence t comparée à la productivité, voir un exemple classique.

Le résultat d'impression est identique, mais la logique est complètement différente. Dans le premier émetteur G1, un itérateur est versé directement via la productivité. C'est-à-dire que d'exécuter des boucles afin que nous soyons vraiment de la plage (5) et que le deuxième émetteur G2 obtient le retour de la valeur dans la boucle dans cette répétition de la productivité magnétique.
signifie, apportant le mot possible
renvoie itérateur ou résultats après que l'émetteur est suivi

Enfin, regardons une scène classique utilisée par la productivité de:

Nous avons identifié un nœud dans l'arborescence binaire de ce code et sa méthode d'itération correspondante. Parce que nous utilisons la productivité pour retourner les résultats, la méthode de répétition est essentiellement un générateur. En regardant la méthode répétée, nous appelons la répétition via la productivité. Nous continuerons donc automatiquement à analyser l'élément de nœud.lcild, ce qui signifie nous.

Entrez la récursion
par la productivité de

Lorsque nous construisons des arbres, vous pouvez utiliser root.Aser directement dans tout l'arbre. def test(): n = 0 while True: if n < 3: yield n n += 1 else: yield 10 if __name__ == '__main__': t = test() for i in range(10): print(next(t))
Avec la productivité de là, nous pouvons facilement utiliser des idées récursives pour effectuer des générateurs sur un arbre. Il est pratique de passer par tous les éléments d'arbres avec l'idée des générateurs. Ici, à propos de la connaissance des boucles et des générateurs à Python terminé, le concept de deux est un peu proche, mais ce n'est pas exactement, de nombreux débutants sont facilement confus.

Il peut être utilisé pour comprendre que la boucle et le générateur sont comme de la même manière, ils ont passé la suivante à obtenir l'élément suivant. Nous avons créé une fonction à travers la productivité et les résultats du retour sont vraiment un itérateur des données créées par le créateur. C'est l'iTTETE Itérateur Ne répétez que les données et obtenez des données, mais cela ne crée pas de données sans centreAI Le jeu principal de la création consiste à créer des données et les données créées renvoyées comme itéritor.

Exemple: , vous avez ouvert une maison de thé au lait et vous pouvez obtenir des revenus sur votre compte bancaire via le Teahouse au lait. L'itération est ce compte, à travers elle, vous pouvez prendre un stylo. Le magasin de thé au lait est un générateur, qui apparaît des données, mais cela vous est retourné sous la forme d'itérateur, ce qui vous fournit un revenu sur votre compte bancaire. Nous ne connaissons pas l'argent dans ce qu'il gagne, vous ne pouvez voir que de l'argent, c'est-à-dire que nous n'avons pas Il connaît la logique des données derrière le lisse. Mais nous sommes clairs, à cause de l'argent (logique de production) est notre gagnant individuel

Sujets

Catégories