我有以下代码片段,它使用生成器来提供新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)
或者有更好的方法吗?
更多,这可能会更加笼统:我如何备忘/分配发电机 如果不是int类型的状态/值?
谢谢!
答案 0 :(得分:1)
不,生成器只生成项目,一旦创建它们就无法设置或保存它们的状态。所以self._generator = itertools.count(99)
确实是最好的方式。
你可以做的是用itertools.tee
复制一个生成器,它记住第一个iterable的输出序列并将它传递给新的生成器。
您还可以编写一个可以从您可以更改的来源绘制的生成器:
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