Très bien, cette liste massive a finalement fini d'être entrée en mémoire.
Mais rappelez-vous nos termes clés, rappelez-vous comment il a dit qu'une liste est un itérable ?
Qu'est-ce qu'un itérable ?
Eh bien, un itérable est n'importe quel objet en Python, que nous pouvons parcourir sous le capot,
il a la méthode Dundar ed.
Ainsi, lorsque l'objet est créé, cet itour nous permet d'avoir un objet itérable qui peut
être itéré pour itérer quelque chose ou l'itération est l'acte de prendre un élément d'un itérable, de lui faire quelque chose, puis de
passer au suivant.
Lorsque nous utilisons des boucles comme des boucles for ou des boucles while, nous appelons cette itération.
C'est le processus lui-même.
Et des générateurs.
Sont en fait itérables, c'est-à-dire que tout ce qui est un générateur est itérable, vous pouvez les parcourir, mais pas tout
ce qui l'est.
Iterable est un générateur, par exemple, une gamme est un générateur.
Donc ça va toujours être itérable.
Mais une liste est un itérable, mais ce n'est pas un générateur.
Ainsi, un générateur est un sous-ensemble d'un itérable.
Je sais que ce sont beaucoup de mots.
J'espère que tu es toujours avec moi.
La différence entre un générateur et un itérable régulier réside dans la façon dont nous les implémentons.
Alors laissez-moi vous montrer une manière générale de créer un générateur.
Effacons ce code et définissons notre propre générateur et les générateurs sont généralement des fonctions tout comme range est une fonction,
les générateurs sont généralement créés de cette façon.
Alors disons la fonction génératrice.
Et cette fonction génératrice va avoir une boucle for qui va boucler sur une plage comme nous l'avions
auparavant.
Mais la différence ici, reprenons en fait le code que nous avions précédemment.
Elle va commenter cela afin que nous puissions le voir en termes de différence.
La fonction générateur va.
Créez, disons, ces nombreux éléments.
Mais au lieu de retourner comme nous le ferions dans une fonction normale, nous allons utiliser un mot clé appelé
rendement.
Et ici, nous allons céder le I donc l'élément.
Alors remarquez la différence ici.
Maintenant, si nous voulons juste comme ici, nous pouvons passer un numéro.
Comme ça, mais au lieu de revenir.
Et en ajoutant cette liste et en créant toutes ces données, nous allons utiliser ILD.
Maintenant, qu'est-ce que yield, voyez-vous yield interrompt la fonction et y revient lorsque nous lui faisons quelque chose, qui est appelé next, quelque
chose que nous couvrirons sous peu ?
Alors Yield dit, hé, mettez la fonction en pause, cède.
Je donne je et quand tu me dis de continuer, alors je continuerai.
Alors comment pouvons-nous faire cela?
Eh bien, je peux dire pour l'élément de la fonction de générateur que je vais utiliser.
Imprimez l'article.
Maintenant, ici, ce qui va se passer, c'est que nous allons boucler sur la fonction génératrice et nous allons la
donner à la fonction génératrice, disons mille pour l'instant.
Et nous allons imprimer chaque élément dans la fonction génératrice car il s'agit d'un itérable.
Cela va s'exécuter et cela va boucler et pour chaque élément de ce nombre, c'est donc la plage que nous allons
donner, pourquoi?
Donc ça va continuer à tourner en boucle.
Et quand on revient, quand on boucle.
Nous allons exécuter ceci et le rendement.
Revient et court à nouveau.
Laissez-moi vous montrer ce que je vais commenter, commentez-le également et cliquez simplement sur Ron ici.
Avez-vous vu que ce que nous venons de faire ici est similaire à ici, mais au lieu d'avoir à créer cette
liste en mémoire, elle a continué une par une.
Nous n'avons gardé qu'un seul élément en mémoire.
Et nous l'avons utilisé comme nous le voulions, dans notre cas, tout ce que nous avons fait était d'imprimer l'article.
Explorons un peu plus ce mot clé de rendement.
Que fait-il concrètement ?
Disons que nous voulons multiplier cela par deux, comme nous l'avons fait ici dans notre exemple d'origine avec
list, mais maintenant, au lieu de faire la boucle for, appelons simplement la fonction.
Et disons que G est égal à la fonction génératrice et nous allons lui donner 100.
Maintenant, si j'imprime G et que je clique sur exécuter.
Vous voyez que j'obtiens un objet générateur.
Je me souviens que ce n'est que la méthode standard en Python pour créer une fonction
génératrice à l'aide de la plage et du mot-clé yield, mais ce mot-clé yield nous donne du pouvoir car si je reviens ici.
Nous n'allons rien obtenir de spécial, en fait, nous allons simplement obtenir une valeur à la
place en utilisant le mot-clé yield.
Ce que nous sommes capables de faire, c'est de transformer cela en une fonction génératrice qui peut bien faire, je peux dire Next
G.
Maintenant, si j'imprime Next G ici et que je clique sur exécuter.
J'obtiens zéro.
Mais voici une partie intéressante, si je fais NextG deux fois, puis une fois ici et imprimé.
Je reçois pour.
Pourquoi donc?
N'oubliez pas que le mot-clé eagle met la fonction en pause.
Donc, ce qui vient de se passer ici, c'est que j'ai exécuté la fonction avec cent.
Le premier élément de la plage 100 était zéro.
À droite.
Maintenant, ici, avant même que je puisse exécuter, ceci est dit, hé, c'est une fonction génératrice, mais la première fois que
vous l'exécutez.
Donnez à la sortie zéro fois pour que la toute première fois que nous exécutions cette fonction et que je clique sur exécuter.
Je vais m'assurer que nous le changeons en I.
C'est juste cette année.
Si je l'exécute à nouveau comme ça, alors nous avons maintenant je veux que vous parcouriez et passiez à un.
Alors une fois deux, qu'est-ce que c'est ?
Quoi, une fois pour me laisser régler ça comme ça ?
Assurez-vous que c'est moi, j'y arrive car une fois deux font deux, si je l'exécute à nouveau et que je clique sur exécuter.
Je reçois pour.
Vous voyez que yield, comme je l'ai déjà dit, met la fonction en pause et y revient lorsque la prochaine est appelée.
Donc, s'il a un mot-clé de rendement, il devient un générateur.
Il garde une trace de cet état, ce que nous appelons la valeur, et il ne garde en mémoire que les données les
plus récentes, par exemple, car il s'en souvient car à la dernière ligne 14, si j'imprime Next G.
Il se souvient qu'avant cela j'étais.
Eh bien, pour l'instant, même si ce morceau de code a déjà été exécuté, si je l'exécute à la ligne 14.
J'en reçois six.
Parce que trois fois deux, eh bien, ça fait six, rappelez-vous, parce que ça se multiplie par deux, alors laissez-moi vous demander
ceci.
Si disons que je n'en fais qu'une seule ici, et vous savez quoi ?
Supprimons simplement multiplier par deux.
Si je fais cela et que je cours encore plus, alors eh bien, plus d'une fois, que se passera-t-il si je clique sur exécuter ici ?
J'obtiens une itération d'arrêt, vous voyez que next peut être appelé autant de fois que nous le souhaitons, autant de fois
jusqu'à ce que cette plage expire et lorsque nous dépassons le nombre d'éléments dans la plage.
Eh bien, nous obtenons une itération d'arrêt, euh.
Pour nous faire savoir que, hé, vous ne pouvez plus appeler le prochain.
Nous avons atteint la fin de la ligne et lorsque nous utilisons des boucles for avec des plages, il le détecte réellement sous le
capot pour vous.
Nous pouvons donc exécuter une fonction comme celle-ci où nous utilisons range, même si range est un générateur, car la boucle
for dit automatiquement, hé, je vais arrêter de boucler dès que je rencontre cette itération d'arrêt, mais c'est caché
loin de nous en tant qu'utilisateurs.
Maintenant, ce concept de générateurs est assez difficile à comprendre, surtout au début.
Vous devrez donc peut-être regarder cela plusieurs fois.
Mais au cours des deux prochaines vidéos, je veux vous convaincre à quel point elles sont puissantes.
Je verrai dans le prochain par.