Reusing Generators in Python
A friend of mine had an issue recently with a generator in Python. Here’s the code:
def our_generator(input): while input: do(something, on, input) yield something print(list(our_generator(input))) for i in our_generator(input): do(something, else, with, i)
See the bug?
There was an issue with the
for-loop, so the print statement was added in, but this changed the behavior of the program. Once the generator has expired, it can’t be reused, so it never entered the
for-loop. Since the generator would be exhausted anyway, we can get the expected behavior without additional cost by doing the following:
output = list(our_generator(input)) print(output) for i in output: do(something, else, with, i)