构建带有回滚的Python计数器

1 投票
3 回答
3027 浏览
提问于 2025-04-28 03:15

我需要创建一个消息计数器对象——不要和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的最大值)

撰写回答