gpt4 book ai didi

python 错误?惰性对象具有隐藏状态

转载 作者:行者123 更新时间:2023-11-28 20:08:18 28 4
gpt4 key购买 nike

考虑这个(Python 3.3):

a=enumerate([2,3,5])
print(list(a))
print(list(a))

你真的希望两次打印调用打印不同的东西吗?我也没有。

如果用 settupledict 替换 list,也会发生同样的事情。如果将 enumerate 对象替换为 mapfilter 也会发生这种情况,但奇怪的是,如果将其替换为 range.

也许这是一个特点。但它非常令人惊讶,没有记录(至少我还没有找到任何相关信息),并且不一致(范围不同)。你怎么看?

最佳答案

enumerate() 返回一个迭代器,其他调用也是如此。您只能循环一次迭代器;然后它就筋疲力尽了。

您可以使用生成器函数自己创建这样一个迭代器:

def somelist_generator():
somelist = [1, 2, 3]
while somelist:
yield somelist.pop()

如果你要遍历 somelist_generator(),列表 somelist 将被清空。你只能这样做一次,因为 .pop() 删除了元素:

>>> it = somelist_generator()
>>> for i in it:
... print(i)
...
3
2
1
>>> next(it)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration

next() 调用试图从 it 迭代器中获取另一个值;它已经是空的,因此引发了 StopIteration 异常。该异常表示没有更多的元素要获取,这就是为什么您第二次尝试从迭代器获取任何内容时得到一个空列表的原因:

>>> list(it)
[]

range() 返回一个迭代器。它返回 range object相反,它代表了一系列内存效率高的数字;只需要存储开始、结束和步幅,其他所有内容都可以从这 3 个点导出。

关于 python 错误?惰性对象具有隐藏状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14136871/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com