I’d like to know what happens when I pass the result of a generator function to python’s enumerate(). Example:
JavaScript
x
11
11
1
def veryBigHello():
2
i = 0
3
while i < 10000000:
4
i += 1
5
yield "hello"
6
7
numbered = enumerate(veryBigHello())
8
for i, word in numbered:
9
print i, word
10
11
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:
JavaScript
1
17
17
1
>>> def abc():
2
letters = ['a','b','c']
3
for letter in letters:
4
print letter
5
yield letter
6
7
>>> numbered = enumerate(abc())
8
>>> for i, word in numbered:
9
print i, word
10
11
a
12
0 a
13
b
14
1 b
15
c
16
2 c
17