python - 生成一个无限列表?
问题描述
知道这很可能以失败告终,我想知道 Python 将如何处理这种情况以及我的代码是否真的“有意义”,至少在原则上是这样。所以这是我的尝试,我对 python 还很陌生(几天前),所以我确信我的代码对于那些有更多经验的人来说似乎很有趣,但请多多包涵。
def make_inf_lst(lst):
lst = [0]
while 1 == 1:
for i in range(0, len(lst)):
add = lst[i] + 1
lst.append(add)
print(make_inf_lst([]))
这是我在尝试运行上述内容的 DOS 窗口中遇到的错误:
Traceback (most recent call last):
File "break_python.py", line 7, in <module>
print(make_inf_lst([]))
File "break_python.py", line 6, in make_inf_lst
lst.append(add)
MemoryError
先感谢您。
解决方案
具有“无限”数据结构的语言实际上是在生成对象,这些对象会延迟或“按需”生成其值。他们不是预先创建整个列表,而是创建一个对象,当被要求提供一个值时,可以在那个时候创建它。
在 Python 中,这最容易使用生成器进行管理。
def make_inf_sequence():
x = 0
while True:
yield x
x = x + 1
# This returns immediately
naturals = make_inf_sequence()
# This loop runs forever
for i in naturals:
print(i)
推荐阅读
- javascript - 测试是否为 Vue 中的事件调用了该方法
- python - 如何分配和管理优先级机制
- css - 是否有任何用于 vscode 的 svg 路径参数缩进工具/编辑器或插件?
- python-3.x - Tesseract 返回 None 而不是 number
- css - 如何管理短文本和长文本内容的“剑道反应下拉列表项(k-item)”宽度?
- javascript - 代码中我的对话流请求有什么问题(它适用于邮递员)?
- python - Python - 按数字对(正负)整数列表进行排序
- codenameone - 时区、语言和国家列表
- apache-flink - 如何使用 Java 在 apache flink 中计算每秒事务数(TPS)
- java - Oracle OCI 驱动程序在密码到期警告时抛出 / 零错误