This works fine:
>>> def my_range(stop):
i = 0
while i < stop:
yield i
i += 1
>>> [k for k in my_range(10) if k < 5]
[0, 1, 2, 3, 4]
Now I modify my generator:
>>> def my_range():
i = 0
while True:
yield i
i += 1
>>> result = []
>>> for k in my_range():
if k < 5:
result.append(k)
else:
break
>>> print(result)
[0, 1, 2, 3, 4]
Now, why is this trapped in an infinite loop? Even though I have k < 5. Aren't generators supposed to iterate only when next is called?
>>> [k for k in my_range() if k < 5]