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 是重複一個對象。
優點:無需手動實現,真正意義上的無限