使用滚动构建python计数器

使用滚动构建python计数器,python,oop,Python,Oop,我需要创建一个消息计数器对象——不要与Python的计数器类混淆。该规范调用一个计数器,该计数器初始化为0,然后递增1,直到达到4294967295,此时应该循环回到1 我已经实现了一个类来实现这一点,但这只是一种幼稚的方法。有没有更好的方法来实现这一目标 class MessageCounter(): def __init__(self): self.value = 0 def increment(self): if self.value < 429496

我需要创建一个消息计数器对象——不要与Python的计数器类混淆。该规范调用一个计数器,该计数器初始化为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
class MessageCounter():
定义初始化(自):
self.value=0
def增量(自):
如果self.value<4294967295:
self.value+=1
其他:
self.reset()
def reset():
self.value=1

不用重置,只需使用模运算符:。它将“重置”为0而不是1,但这并不重要,因为您初始化为0

def increment(self):
    self.value = (value + 1) % 4294967296

您可以只使用模运算符,而不是重置:。它将“重置”为0而不是1,但这并不重要,因为您初始化为0

def increment(self):
    self.value = (value + 1) % 4294967296

您可以只使用模运算符,而不是重置:。它将“重置”为0而不是1,但这并不重要,因为您初始化为0

def increment(self):
    self.value = (value + 1) % 4294967296

您可以只使用模运算符,而不是重置:。它将“重置”为0而不是1,但这并不重要,因为您初始化为0

def increment(self):
    self.value = (value + 1) % 4294967296

我举了一个例子,更简短一些

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
class MessageCounter():
定义初始化(自):
self.value=0
def增量(自复位=假):
如果self.value<4294967295且未重置,则self.value=self.value+1

我举了一个例子,更简短一些

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
class MessageCounter():
定义初始化(自):
self.value=0
def增量(自复位=假):
如果self.value<4294967295且未重置,则self.value=self.value+1

我举了一个例子,更简短一些

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
class MessageCounter():
定义初始化(自):
self.value=0
def增量(自复位=假):
如果self.value<4294967295且未重置,则self.value=self.value+1

我举了一个例子,更简短一些

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
class MessageCounter():
定义初始化(自):
self.value=0
def增量(自复位=假):
如果self.value<4294967295且未重置,则self.value=self.value+1

作为OO的替代方案,您可以创建一个生成函数,该函数可以永远按顺序生成数字。有很多方法可以做到这一点。按尺寸和直线度的降序排列:

def count_loop(upper_limit):
    while True:
        for i in range(upper_limit):
            yield i
gen = count_loop(4294967295)


然后通过执行
next(gen)
来检索您的值


(注意:Python 2.7用户应该使用
xrange
而不是
range
。但是,这可能只适用于小于2^31的最大值)

作为OO的替代方法,您可以创建一个生成函数,永远按顺序生成数字。有很多方法可以做到这一点。按尺寸和直线度的降序排列:

def count_loop(upper_limit):
    while True:
        for i in range(upper_limit):
            yield i
gen = count_loop(4294967295)


然后通过执行
next(gen)
来检索您的值


(注意:Python 2.7用户应该使用
xrange
而不是
range
。但是,这可能只适用于小于2^31的最大值)

作为OO的替代方法,您可以创建一个生成函数,永远按顺序生成数字。有很多方法可以做到这一点。按尺寸和直线度的降序排列:

def count_loop(upper_limit):
    while True:
        for i in range(upper_limit):
            yield i
gen = count_loop(4294967295)


然后通过执行
next(gen)
来检索您的值


(注意:Python 2.7用户应该使用
xrange
而不是
range
。但是,这可能只适用于小于2^31的最大值)

作为OO的替代方法,您可以创建一个生成函数,永远按顺序生成数字。有很多方法可以做到这一点。按尺寸和直线度的降序排列:

def count_loop(upper_limit):
    while True:
        for i in range(upper_limit):
            yield i
gen = count_loop(4294967295)


然后通过执行
next(gen)
来检索您的值



(注意:Python2.7用户应该使用
xrange
而不是
range
。但是,这可能只适用于小于2^31的最大值)

除了幻数之外,这是一种非常有效的方法。你到底对什么感到不舒服?因为这是一段没有具体问题的工作代码,所以在CodeReview上发布它可能更有趣。我会将
4294967295
设置为类属性(例如
VALUE\u CAP
),以删除“幻数”并添加一些docstring,但是如果你使用jonrsharpe所说的常量方法,你就应该使用<代码> 2 **32—而不是那个数字。你可以考虑模拟一个数字,通过定义诸如<代码>你到底对什么感到不舒服?因为这是一段没有具体问题的工作代码,所以在CodeReview上发布它可能更有趣。我会将
4294967295
设置为类属性(例如
VALUE\u CAP
),以删除“幻数”并添加一些docstring,但是如果你使用jonrsharpe所说的常量方法,你就应该使用<代码> 2 **32—而不是那个数字。你可以考虑模拟一个数字,通过定义诸如<代码>你到底对什么感到不舒服?因为这是一段没有具体问题的工作代码,所以在CodeReview上发布它可能更有趣。我会将
4294967295
设置为类属性(例如
VALUE\u CAP
),以删除“幻数”并添加一些docstring,但是如果你使用jonrsharpe所说的常量方法,你就应该使用<代码> 2 **32—而不是那个数字。你可以考虑模拟一个数字,通过定义诸如<代码>你到底对什么感到不舒服?