There is an equivalent of list comprehension for generators. Such a construction is called a generator expression:
g = (n for n in range(1000) if not n % 100) # generator for 100, 200, ... , 900
This is useful in particular for computing sums or products because those operations are incremental; they only need one element at a time:
sum(n for n in range(1000) if not n % 100)
# returns 4500 (sum is here the built-in function)
In that code, you notice that the sum function is given one argument, which is a generator expression. Note that Python syntax allows us to omit the enclosing parentheses of generators when a generator is used as the only argument of a function.
Let's compute the Riemann zeta function , whose expression is
With a generator expression, we may compute a partial sum of this series in one line:
sum(1/n**s for n in itertools.islice(itertools.count(1), N))
Note that we could also have defined...