无限 for 循环的实现【Python】

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 是重复一个对象。

优点:无需手动实现,真正意义上的无限

发布了52 篇原创文章 · 获赞 143 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/lnotime/article/details/102497678