jur*_*eza 0 python list-comprehension generator
这很好用:
>>> 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]
Run Code Online (Sandbox Code Playgroud)
现在我修改我的发电机:
>>> 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]
Run Code Online (Sandbox Code Playgroud)
现在,为什么这个陷入无限循环?即使我有k <5.生成器是否应该只在下一次被调用时迭代?
>>> [k for k in my_range() if k < 5]
Run Code Online (Sandbox Code Playgroud)
这个答案解释得很好:
请记住以下内容:
Run Code Online (Sandbox Code Playgroud)[ expression for item in list if conditional ]相当于:
Run Code Online (Sandbox Code Playgroud)for item in list: if conditional: expression
这意味着你的列表理解:
[k for k in my_range() if k < 5]
Run Code Online (Sandbox Code Playgroud)
相当于:
for k in my_range():
if k < 5:
k
Run Code Online (Sandbox Code Playgroud)
现在应该清楚为什么它永远不会终止:实际上break无限循环没有任何东西.