gpt4 book ai didi

python - __iter__() 作为生成器实现

转载 作者:太空狗 更新时间:2023-10-29 21:03:48 25 4
gpt4 key购买 nike

我有一个对象子类,它使用缓存生成器实现动态调度 __ iter __(我还有一个使 iter 缓存无效的方法),如下所示:

def __iter__(self):
print("iter called")
if self.__iter_cache is None:
iter_seen = {}
iter_cache = []
for name in self.__slots:
value = self.__slots[name]
iter_seen[name] = True
item = (name, value)
iter_cache.append(item)
yield item
for d in self.__dc_list:
for name, value in iter(d):
if name not in iter_seen:
iter_seen[name] = True
item = (name, value)
iter_cache.append(item)
yield item
self.__iter_cache = iter_cache
else:
print("iter cache hit")
for item in self.__iter_cache:
yield item

它似乎在工作...是否有任何我可能没有意识到的陷阱?我在做什么荒谬的事吗?

最佳答案

container.__iter__() 返回一个迭代器对象。迭代器对象本身需要支持以下两种方法,它们共同构成了迭代器协议(protocol):

iterator.__iter__()

返回迭代器对象本身。

iterator.next()

从容器中返回下一个项目。

这正是每个生成器所具有的,所以不要害怕任何副作用。

关于python - __iter__() 作为生成器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11347196/

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