Iterator objects

As we mentioned earlier, a for loop only needs an iterable object. Lists, in particular, are iterable. This means that a list is able to create an iterator from its contents. In fact, this is true for any object (not only lists): any object may be made iterable.

This is achieved via the __iter__ method, which should return an iterator. Here we give an example where the __iter__ method is a generator:

class OdeStore:
    """
    Class to store results of ode computations
    """
    def __init__(self, data):
        "data is a list of the form [[t0, u0], [t1, u1],...]"
        self.data = data
    
    def __iter__(self):
        "By default, we iterate on the values u0, u1,..."
        for t, u in self.data:
            yield u

store = OdeStore([[0, 1], [0.1, 1.1], [0.2, 1.3]])
for u in store:
    print(u)
# result: 1, 1.1, 1.3
list(store) # [1, 1.1, 1.3]

If you try to use the features of an iterator with an object that is not iterable, an exception will be raised:

>>> list(3)
TypeError: 'int' object is not iterable

In this example, the list function tries to iterate through the object 3 by calling the __iter__ method. But this method is not implemented for integers and thus the exception is raised. The same would happen if we tried to cycle through a non-iterable object:

>>> for iteration in 3: pass
TypeError: 'int' object is not iterable
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.141.42.116