Python 生成器卡在列表中的无限循环中?
这很好:Python 生成器卡在列表中的无限循环中?,python,generator,list-comprehension,Python,Generator,List Comprehension,这很好: >>> 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: yiel
>>> 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]
当LC返回false时,LC中的条件并不意味着中断;如果您想要这种行为,请查看itertools,特别是takewhile。很好地解释了这一点: 请记住以下几点:
[ expression for item in list if conditional ]
相当于:
for item in list:
if conditional:
expression
for k in my_range():
if k < 5:
k
这意味着您的列表理解:
[k for k in my_range() if k < 5]
相当于:
for item in list:
if conditional:
expression
for k in my_range():
if k < 5:
k
现在应该很清楚为什么这永远不会终止:实际上没有什么可以打破无限循环。有没有办法打破并使列表停止从生成器获取值?最好不用itertools@Michael为什么不使用itertools?