我正在编程一个迭代器对象,它会返回对自身的修改,我希望原始对象是迭代过程的一部分,所以需要在修改之前返回它.
...但是:
- 创建要返回的对象的deepcopy非常耗时.
- 对象有很多属性,因此定义辅助变量似乎不是一个优雅的解决方案.
-
__next__
中的yield
将不起作用,因为它在每次迭代中返回不同的类型(生成器). - 我可以用
__iter__
中的yield
来获得一个迭代器,但我不能用__next__
来获得按需迭代(我的对象是一台图灵机,所以受控的一步一步打印磁带会很好).
工作但效率低下的代码示例:
from copy import deepcopy
class MyObject():
def __init__(self, n):
self.n = n
def __str__(self):
return str(self.n)
def __iter__(self):
return self
def __next__(self):
if self.n >= 10:
raise StopIteration
self_copy = deepcopy(self)
self.n += 1
return self_copy
for x in MyObject(n=7):
print(x)
输出:
7
8
9
我可能错过了什么,但我想不出来.