これはうまくいきます:
>>> 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]
次に、ジェネレーターを変更します。
>>> 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]
では、なぜこれが無限ループに陥ってしまうのでしょうか。私は k < 5 を持っていますが、ジェネレーターは next が呼び出されたときにのみ反復するはずではありませんか?
>>> [k for k in my_range() if k < 5]