构建带有回滚的Python计数器
我需要创建一个消息计数器对象——不要和Python的Counter类搞混。这个计数器的要求是一开始初始化为0,然后每次加1,直到达到4294967295为止,之后它应该重新回到1。
我已经实现了一个类来完成这个功能,但这只是一个简单的做法。有没有更好的方法来实现这个目标呢?
class MessageCounter():
def __init__(self):
self.value = 0
def increment(self):
if self.value < 4294967295:
self.value += 1
else:
self.reset()
def reset():
self.value = 1
3 个回答
-2
我有一个例子,简单明了。
class MessageCounter():
def __init__(self):
self.value = 0
def increment(self, reset=False):
self.value = self.value + 1 if self.value < 4294967295 and not reset else 1
0
你可以用取模运算符来代替重置。这样会把值“重置”为0,而不是1,但这没关系,因为你一开始就把它初始化为0了。
def increment(self):
self.value = (value + 1) % 4294967296
5
作为面向对象编程的另一种选择,你可以创建一个生成函数,这个函数会不断地生成数字,永不停歇。有很多方法可以做到这一点。下面是一些方法,按简单程度和大小排序:
def count_loop(upper_limit):
while True:
for i in range(upper_limit):
yield i
gen = count_loop(4294967295)
import itertools
gen = (i for _ in itertools.count() for i in range(4294967295))
gen = (i for _ in iter(int,1) for i in range(4294967295))
然后你可以通过执行 next(gen)
来获取这些值。
>>> next(gen)
0
>>> next(gen)
1
>>> next(gen)
2
>>> next(gen)
3
(注意:使用Python 2.7的用户应该用 xrange
代替 range
。不过,这可能只适用于小于2^31的最大值)