【发布时间】:2020-07-17 19:21:21
【问题描述】:
你能在 python 中创建一个迭代器,在 for 循环退出时运行清理代码吗?比如:
from random import randint
class Iterable:
def __iter__(self):
return self
def __next__(self):
return randint(1, 10)
def __iterclose__(self):
print("Clean up code")
for x in Iterable():
if x < 5:
break
# Prints "Clean up code"
【问题讨论】:
-
您混合了两个不同的概念 Iterables 和 Iterators。 Itterable 的
__iter__应该返回一个 Iterator 对象。而迭代器的__iter__应该返回self。 -
我知道我可以使用上下文管理器,但最好不用!
-
@Jack 好吧,你不能总是得到你想要的。所以答案是否定的。注意,你已经定义了一个iterator,注意只是一个iterable。
-
@TomKarzes 嗯?
-
当完成迭代时,你应该引发
StopIteration异常,此时你应该已经知道你必须执行清理,否则这个迭代器将永远运行。
标签: python python-3.x for-loop iterator iterable