Generators

Generators are a special class of functions. Regular functions compute an object and return it, but generators return an stream of objects.

def fib():
    a, b = 1, 1
    while True:
        a, b = b, a+b
        yield a

The above function will return an infinite stream of Fibonacci numbers:

>>> i = fib()
>>> i.next()
1
>>> i.next()
2
>>> i.next()
3
>>> i.next()
5
>>> for n in i:
...     print n,
... 
8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657
46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887
9227465 14930352 24157817 39088169 63245986 102334155 ...