Bon retour, je veux que nous comprenions comment les choses fonctionnent sous le capot,
je vais donc vous montrer deux exemples d'implémentation de notre propre boucle for Loop, puis d'implémentation de notre propre fonction range.
Le premier est donc notre boucle for.
Je vais donc dire spécial pour la boucle.
Sous le capot, tout ce qu'il fait, c'est recevoir iterable, puis nous allons dire Iterator.
Va équivaloir à un itérable maintenant pour que nous ayons un itérable, nous avons ce que nous appelons une fonction ED.
Cela accepte l'itérable que nous venons de passer.
Maintenant, cette fonction interne va nous permettre d'utiliser la fonction suivante sur cet itérable, alors restez avec moi.
Je vais dire tout en vrai.
Je veux.
Essayer.
Et dans ce bloc tri dira Iterator.
Et nous pouvons effectuer, disons, une sorte d'opération ici si nous le voulons, ou nous pouvons simplement appeler l'itérateur suivant.
Vous savez, imprimons quelque chose ici juste pour voir ce qu'est l'itérateur.
Et puis enfin, je veux que nous nous arrêtions lorsque nous aurons l'exception d'itération d'arrêt.
Vous vous souvenez de celui que nous avons vu où il n'y a plus d'éléments dans l'itérable ?
Et ici, nous pouvons simplement rompre.
Et assurez-vous que.
J'ai le Colin défini correctement, donc maintenant si je fais spécial pour Loop et lui donne une liste de un, deux, trois et je clique
sur exécuter.
Vérifiez-le.
Je parcoure certains objets itérables en utilisant next.
Et vous voyez que cet objet existe dans le même espace mémoire, même si nous le parcourons constamment à
travers un, deux, trois.
Voici donc comment les boucles for fonctionnent sous le capot lorsque nous faisons for, disons, ngom, puis nous lui donnons une
liste.
Ça va tout traverser, ça va le transformer en un admirable et ça va continuer à fonctionner et continuer à
appeler le prochain itérateur dessus encore et encore jusqu'à ce que nous terminions la fin de la ligne et que nous
sortions de la boucle.
Et comment vérifions-nous les valeurs réelles de l'itérateur ?
Eh bien, rappelez-vous, la fonction suivante va afficher quel que soit l'élément suivant.
Donc si j'imprime ici.
Et je clique sur exécuter.
J'en reçois un, deux, trois.
Donc, je peux juste faire deux fois si je voulais cliquer sur exécuter.
Et voilà, c'est spécial pour Loop, on vient de multiplier notre liste par deux.
C'est tout, c'est tout pour les boucles, ça marche vraiment, mais qu'en est-il des plages ?
Pouvons-nous créer notre propre fonction de plage ?
Nous pouvons absolument, et c'est amusant.
Créons une classe et cette classe, car à la fin de la journée, nous allons juste créer un
objet.
Cela a des actions que nous pouvons faire, donc je vais dire ma génération pour mon générateur, et cela va imiter ce que fait
notre gamme.
Je vais donc avoir une classe et cette classe aura une fonction INET, aura un self, un premier et un dernier.
C'est ainsi que nous pouvons dire qu'une gamme commence par ceci et se termine par ceci.
Et ici, nous ferons d'abord l'autodidacte typique.
Égal au premier.
Et puis autodidacte dernier égal à dernier, et j'utilise une classe ici parce que, rappelez-vous, nous
créons simplement notre propre type de données, notre propre plage spéciale en Python.
Maintenant, nous avons notre générateur simple, et idéalement, nous voulons pouvoir dire que Jen est égal et instancier
mon Jen pour avoir, disons, zéro à 100, comme nous le ferions avec une plage.
Et idéalement, nous pouvons dire pour AI et Jen.
Et imprimer.
Je parce que, je veux dire, c'est comme ça que nous pouvons utiliser les plages, n'est-ce pas ?
Alors, comment puis-je faire en sorte que cela fonctionne ?
Eh bien, nous pouvons utiliser nos méthodes Dundar, alors rappelez-vous comment nous avons eu le it'a.
Pour obtenir un itérateur et l'utiliser ensuite ?
Eh bien, nous avons un Dundar défini qui est notre et It'a nous permet de créer.
Un airball, donc dans notre cas, je dirai self, et ici je vais juste rendre la classe réelle comme ça.
Et puis finalement, nous voulons pouvoir exécuter la prochaine fonction sur notre Djenné car nous avons vu jusqu'où le travail de
Loop, nous devons pouvoir utiliser le it'a puis le prochain Onda.
Donc, encore une fois, nous pouvons utiliser une méthode Dundar, qui s'appelle commodément.
Suivant.
Et cela est intégré à Python, donc si j'entends moi-même.
Et tout ce que nous voulons faire ici, c'est lui faire savoir comment nous voulons travailler ensuite, tandis que je dirai si et nous avons besoin d'une
sorte d'état ou de données pour savoir où nous en sommes.
Rappelez-vous comment fonctionne le générateur.
Rappelez-vous où ils sont.
Eh bien, nous pouvons créer un objet de classe HB, donc je peux dire que le courant est égal à zéro.
C'est donc là où nous en sommes actuellement sur notre itération et disons mon gen dot current, tant que c'est moins
que self last, qui sera la centaine ici si c'est le cas.
Eh bien, je veux qu'un nombre soit égal à mon courant de point de génération, je veux augmenter mon courant de point de génération d'un parce que nous
voulons dire, hé, nous passons à l'emplacement suivant, puis revenons.
Le nombre.
Parce que c'est ainsi que fonctionne la suite sous le capot, à droite, nous incrémentons notre emplacement actuel de
un et nous renvoyons simplement le nombre, ce qui est bien, dans notre cas, ce sera zéro.
Et nous voulons continuer, continuer, continuer.
Eh bien, jusqu'à ce que le courant ne soit plus plus grand que le dernier, dans ce cas, nous allons simplement
déclencher une itération d'arrêt car il n'y a plus de choses sur lesquelles itérer.
Voyons si cela fonctionne.
Je vais lancer ça.
Et regardez ça, tout fonctionne.
J'ai pu parcourir mon générateur et imprimer de zéro à quatre-vingt-dix-neuf.
Encore une fois, si nous revenons à notre exemple ici.
Et je sais que c'est un peu difficile à regarder au début.
Mais tout ce que j'ai fait, c'est dire que je veux qu'une fonction informatique ait la possibilité de choisir le premier et le dernier.
Et je vais vouloir pouvoir parcourir cet objet que je vais créer, et je veux aussi pouvoir
utiliser la prochaine boucle for, si vous vous souvenez de notre exemple précédent, a besoin.
Je vais donc dire pour l'élément dans Jen, il suffit de le parcourir, je peux
le parcourir car il s'agit maintenant d'un itérateur et je peux utiliser la valeur suivante dessus car je nous autorise à boucler et
augmenter constamment de un.
Jusqu'à ce que nous continuions à revenir, les nombres, continuez à renvoyer le nombre jusqu'à ce que mon sexe actuel
devienne cent et que 100 ne soit pas inférieur à 100 cents, qui est le dernier éponyme.
Cela va donc déclencher une itération d'arrêt.
La boucle for nous attrape automatiquement afin qu'elle ne s'érode pas et qu'elle arrête de boucler.
C'est ainsi que les choses fonctionnent sous le capot avec la cuisinière.
Maintenant, vous n'avez pas besoin de le savoir, on ne vous demandera pas au quotidien de mettre cela en œuvre, mais
je voulais vous montrer que c'est ainsi que les choses fonctionnent.
Je pense que c'est important.