for 循环怎么才能无限循环下去呢?
1. 最 low 的方法:一个无限的列表
理解 for 在干什么,在遍历,那我们给他一个无限长的东西,不就无限循环了。
list_ = [None]
for _ in list_:
list_.append(None)
# Other operations.
- 优点:易于理解,最容易想到的方式
- 缺点:速度慢,占内存,最后肯定会溢出的,其实不是真正意义上的无限。
2. 实现一个无限的迭代器
理解 for 的本质,是先获取一个迭代器,再依次调用 next
。那我们自己实现一个迭代器,让它的 next
永远都不不抛出 StopIteration
异常,那不就永远 for
下去了
class MyIter:
def __iter__(self):
return self
def __next__(self):
pass
for _ in MyIter():
# Other operations.
- 优点:真正的无限,不浪费内存
- 缺点:依然需要个人手动实现一些东西
3. 使用内置的无限迭代器
使用别人已经造好的无限迭代器,避免自己写了
3.1 count
from itertools import count
for i in count():
print(i)
# Other operations.
- 优点:近似是无限的,不需要手动实现什么,自带自定义初始值、步长的计数
- 缺点:如果时间无限,内存有限,那么可以认为有一天计数的值会非常大,大到计算机放不下,当然不需要等到那一天,只要数字足够大,就会比其他无限迭代器浪费时间
3.2 cycle、repeat
cycle
from itertools import cycle
for _ in cycle((None,)):
# Other operations.
repeat
from itertools import repeat
for _ in repeat(None):
# Other operations.
cycle 和 repeat 都是用来实现重复输出的。cycle 是重复一堆对象,repeat 是重复一个对象。
优点:无需手动实现,真正意义上的无限