无限 for 循环的实现【Python】

本文探讨了在Python中实现无限循环的三种方法:通过无限列表、自定义无限迭代器及利用内置无限迭代器如count、cycle和repeat。每种方法都有其优缺点,如内存效率和实现难度。
部署运行你感兴趣的模型镜像

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

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

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### Python中创建无限循环的方法 #### 使用自定义生成器实现`for`无限循环 通过定义一个具有特定方法的类来模拟生成器的行为,可以利用`for`语句达成无限循环的效果。此类需包含两个特殊成员函数——`__iter__()`, `__next__()`。当对象被迭代时会调用这些方法从而持续产出新值而不终止。 ```python class InfiniteLoop: def __iter__(self): return self def __next__(self): pass # 这里可以选择抛出自定义逻辑或简单地pass以保持无限运行状态 for item in InfiniteLoop(): print("这是一次无限循环的输出") ``` 上述代码展示了如何构建一个简单的无限循环机制[^1]。 #### 利用标准库`itertools.cycle()` 另一种更为简洁高效的做法是采用Python内置的标准库`itertools`里的`cycle()`函数。该函数接收一个可迭代对象作为参数并反复遍历其中元素直到程序停止条件满足为止。 ```python from itertools import cycle infinite_sequence = cycle([1]) # 创建只含单个元素'1'的无限序列 for element in infinite_sequence: print(f"当前值为:{element}") ``` 此方式不仅减少了手动编写额外类结构的工作量还提高了性能表现[^2]。 #### 动态扩展列表法(不推荐) 虽然可以通过不断向列表追加项的方式来制造看似无尽的数据源供`for`循环消费,但这并不是一个好的实践因为随着列表的增长可能会消耗大量内存资源甚至引发溢出错误。 ```python dynamic_list = [] for _ in dynamic_list: dynamic_list.append(None) print("动态增加列表长度以形成伪无限循环") ``` 这种方法存在明显缺陷并不适合实际应用环境[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值