The expression (sum(row) for row in M)
creates what’s called a generator. This generator will evaluate the expression (sum(row)
) once for each row in M
. However, the generator doesn’t do anything yet, we’ve just set it up.
The statement next(G)
actually runs the generator on M
. So, if you run next(G)
once, you’ll get the sum of the first row. If you run it again, you’ll get the sum of the second row, and so on.
>>> M = [[1,2,3],
... [4,5,6],
... [7,8,9]]
>>>
>>> G = (sum(row) for row in M) # create a generator of row sums
>>> next(G) # Run the iteration protocol
6
>>> next(G)
15
>>> next(G)
24
See also:
- Documentation on generators
- Documentation on yield expressions (with some info about generators)