Maison > Article > développement back-end > Explication détaillée du fonctionnement de la boucle for en Python
Si vous n'êtes pas très clair sur la boucle for en python, alors je vous suggère de lire cet article. Cet article vous présente principalement les informations pertinentes sur le fonctionnement de la boucle for en Python. très détaillé et a une certaine valeur de référence et d'apprentissage pour tous les amis qui en ont besoin peuvent y jeter un œil ci-dessous.
Préface
for...in est l'instruction la plus couramment utilisée par les programmeurs Python. La boucle for est utilisée pour itérer le conteneur <.>objet, ces objets peuvent être des listes, des tuples, des dictionnaires, des ensembles, des fichiers, ou même des classes ou fonctions personnalisées, par exemple :
agit sur la liste
>>> for elem in [1,2,3]: ... print(elem) ... 1 2 3agit sur les tuples
>>> for i in ("zhang", "san", 30): ... print(i) ... zhang san 30agit sur
>>> for c in "abc": ... print(c) ... a b cagit sur la collection
>>> for i in {"a","b","c"}: ... print(i) ... b a cActes sur dictionnaire
>>> for k in {"age":10, "name":"wang"}: ... print(k) ... age nameActes sur dossier
>>> for line in open("requirement.txt"): ... print(line, end="") ... Fabric==1.12.0 Markdown==2.6.7
La boucle for est le processus d'itération du conteneur. Qu'est-ce que l'itération ? L'itération consiste à lire les éléments d'un objet conteneur un par un jusqu'à ce qu'il n'y ait plus d'éléments dans le conteneur. Alors, quels objets prennent en charge les opérations itératives ? N’importe quel objet peut-il être utilisé ? Essayez d'abord de personnaliser une classe et voyez si cela fonctionne :
>>> class MyRange: ... def init(self, num): ... self.num = num ... >>> for i in MyRange(10): ... print(i) ... Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'MyRange' object is not iterable
Les objets itérables doivent implémenter la méthode iter et renvoyer un itérateur. Qu'est-ce qu'un itérateur ? Les itérateurs n’ont qu’à implémenter la méthode suivante. Vérifions maintenant pourquoi la liste prend en charge l'itération :
>>> x = [1,2,3] >>> its = x.iter() # x有此方法,说明列表是可迭代对象 >>> its <list_iterator object at 0x100f32198> >>> its.next() # its有此方法,说明its是迭代器 1 >>> its.next() 2 >>> its.next() 3 >>> its.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIterationAlors, comment boucle l'instruction for ? À ce stade, je crains que vous l'ayez deviné. Les étapes sont les suivantes :
StopIteration gérera cette exception par lui-même et ne l'exposera pas. aux développeurs
Il en va de même pour les tuples, les dictionnaires et les chaînes. Après avoir compris le principe d'exécution de for, nous pouvons implémenter notre. propres itérateurs à utiliser dans les boucles for.
L'erreur MyRange précédente était due au fait qu'elle n'implémentait pas ces deux méthodes dans le protocole de l'itérateur. Continuez maintenant à améliorer :
class MyRange: def init(self, num): self.i = 0 self.num = num def iter(self): return self def next(self): if self.i < self.num: i = self.i self.i += 1 return i else: # 达到某个条件时必须抛出此异常,否则会无止境地迭代下去 raise StopIteration()
for i in MyRange(3): print(i) # 输出 0 1 2
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!