J'implémente un itérateur en Python qui enveloppe un autre itérateur et post-traite la sortie de l'itérateur avant de la transmettre. Voici un exemple trivial qui prend un itérateur qui renvoie des chaînes et prepends FILTERED BY MYITER:
à chacun:Une exception StopIteration se propage-t-elle automatiquement à travers mon itérateur?
class MyIter(object):
"""A filter for an iterator that returns strings."""
def __init__(self, string_iterator):
self.inner_iterator = string_iterator
def __iter__(self):
return self
def next(self):
return "FILTERED BY MYITER: " + self.inner_iterator.next()
Lorsque l'itérateur interne se termine, il déclenche une exception StopIteration. Ai-je besoin de faire quelque chose de spécial pour propager cette exception quel que soit le code utilisé mon itérateur? Ou cela se produira-t-il automatiquement, ce qui entraînera la fin correcte de mon itérateur.
Excellent, je viens d'apprendre que je peux utiliser les expressions 'yield' et generator dans la méthode '__iter__' d'une classe. Je n'étais pas sûr de savoir comment les utiliser dans une classe itérable. –