Skip to main content
 首页 » 编程设计

python之是否可以恢复迭代器并可以分配其值/状态

2025年05月04日9sky-heaven

我有下面的代码片段,它使用生成器提供新 ID

... 
 
    def __init__(self, id_generator = None): 
        if id_generator is None: id_generator = 0 
 
        if isinstance(id_generator, int): 
            import itertools 
            self._generator = itertools.count(id_generator) 
 
        else: 
            self._generator = id_generator 
... 
 
    id = self._generator.next()  #0 
    id = self._generator.next()  #1 
    id = self._generator.next()  #2 
    id = self._generator.next()  #3 

我的问题是,假设我有一个现有的 ID 号码,例如 int(99) 需要被接受 在运行期间,需要 _generator 生成从 99 开始的 ID。 看起来像:

0 
1 
2 
3 
4 
             <---- new id number 99 be given in somehow 
99 
100 
101 

我怎样才能将它反馈给 _generator? 只需使用 self._generator = itertools.count(99) 还是有更好的方法?

更多,sucn a confuse 可以更一般化:我如何能够 memo/assign 生成器的 状态/值是否不是 int 类型?

谢谢!

请您参考如下方法:

不,生成器只是生成项目,一旦创建就无法设置或保存它们的状态。所以 self._generator = itertools.count(99) 确实是最好的方法。

您可以做的是使用 itertools.tee 复制一个生成器,它会记住第一个可迭代对象的输出序列并将其传递给新的生成器。

您还可以编写一个从您可以更改的源中提取的生成器:

class counter(object): 
    def __init__(self, current=0): 
        self.current = current 
 
    def __iter__(self): 
        def iter(): 
            while True: 
                yield self.current 
                self.current += 1 #  
        return iter() 
 
    def set(self,x): 
        self.current = x 
 
s = counter() 
t = iter(s) 
print t.next() # 0 
s.set(20) 
print t.next() # 21