I had to make two patches because the testing style has changed slightly between the two, but also, it's guaranteed to apply better if I make them against the tip of each version.
def line_number_mogrifier(f):
num = 0
for line in f:
yield (num, line)
num += 1
The functional proponents say that eventually everything will be functional, I guess I'll wait and see how that goes over. People think procedurally. Functional constructs may have some technical advantages, but if adopting them shrinks the pool of effective developers, it won't catch on.