2

我有一个由我构建的项目使用的库。库中的其中一个类在每次实例化时使用 itertools 生成递增的 id(当前从 1 开始)。我希望能够根据使用该库的服务器守护程序的主循环中已知的 id 来初始化库中递增的开始位置。因此,当我启动和停止守护程序时,id 可以从它们停止的地方继续。守护进程可以使用对数据库后端的 SQL 查询来确定正确的起点,但我不知道如何将它传递到库中以用作起点。

从图书馆,目前:

class Thing(object):
    id_iter = itertools.count(1)
    def __init__(self):
        self.id = self.id_iter.next()

我想用一个可以在第一次实例化时传递给类的变量替换 1 。知道怎么做吗?不同的方法?

4

2 回答 2

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
于 2013-08-31T15:18:09.670 回答
0

您可以使用itertools.islice在任意索引处开始(和停止)迭代。

>>> cycler = itertools.cycle(range(20))
>>> itertools.islice(cycler, 10, None).next()
10
>>> cycler.next()
11

在特定情况下如何使用它取决于可迭代的类及其实例化方式。

于 2013-08-31T17:06:41.400 回答