我有一个由我构建的项目使用的库。库中的一个类使用itertools在每次实例化时生成递增id(当前从1开始)。我希望能够根据使用该库的服务器守护程序的主循环中已知的id初始化库中的增量开始位置。这是当我启动和停止守护进程时,ID可以从它们停止的地方开始。守护进程可以使用对db后端的SQL查询来确定正确的起点,但我无法弄清楚如何将其传递到库中以用作起点。
目前来自图书馆:
class Thing(object):
id_iter = itertools.count(1)
def __init__(self):
self.id = self.id_iter.next()
我想用一个可以在第一个实例化时传递给类的变量替换1。知道怎么样?一种不同的方法?
答案 0 :(得分:0)
class Thing(object):
id_iter = None
def __init__(self, num=1):
if Thing.id_iter is None:
Thing.id_iter = itertools.count(num)
self.id = next(self.id_iter)
示例:
x = Thing(5)
print(x.id) #prints 5
y = Thing()
print(y.id) #prints 6
答案 1 :(得分:0)
您可以使用itertools.islice开始(并停止)迭代任意索引。
>>> cycler = itertools.cycle(range(20))
>>> itertools.islice(cycler, 10, None).next()
10
>>> cycler.next()
11
如何在特定情况下使用它取决于可迭代类以及如何实例化它。