I’d like to know what happens when I pass the result of a generator function to python’s enumerate(). Example:
def veryBigHello(): i = 0 while i < 10000000: i += 1 yield "hello" numbered = enumerate(veryBigHello()) for i, word in numbered: print i, word
Is the enumeration iterated lazily, or does it slurp everything into the <enumerate object>
first? I’m 99.999% sure it’s lazy, so can I treat it exactly the same as the generator function, or do I need to watch out for anything?
Advertisement
Answer
It’s lazy. It’s fairly easy to prove that’s the case:
>>> def abc(): ... letters = ['a','b','c'] ... for letter in letters: ... print letter ... yield letter ... >>> numbered = enumerate(abc()) >>> for i, word in numbered: ... print i, word ... a 0 a b 1 b c 2 c