Python 3.x 我的问题是关于发电机的。For循环可以自动迭代,但为什么我们在这里增加了额外的步骤?

Python 3.x 我的问题是关于发电机的。For循环可以自动迭代,但为什么我们在这里增加了额外的步骤?,python-3.x,Python 3.x,在生成器中,为什么我们需要在该程序中执行此附加步骤?。你能详细解释一下吗 class PrimeGenerator: def __init__(self, stop): self.stop = stop self.start=2 self.number=0 def __next__(self): for self.number in range(self.start,self.stop):

在生成器中,为什么我们需要在该程序中执行此附加步骤?。你能详细解释一下吗

    class PrimeGenerator:

       def __init__(self, stop):
       self.stop = stop
       self.start=2
       self.number=0


       def __next__(self):
           for self.number in range(self.start,self.stop):
                for x in range(2, self.number):
                      if self.number % x == 0:
                      break
                else:
                   self.start=self.number+1
                   return self.number
             raise StopIteration                   


  obj = PrimeGenerator(5)
  print(next(obj))

在上面的代码中,为什么我们在这里增加self.start值。这就是self.start=self.number+1。我怀疑它能自动迭代for循环。为什么这里又增加了?

生成器应该生成素数。它以值2作为self.number开始,然后测试从2到self.number的任何数字是否除以self.number,如果是这种情况,则它不是素数(因为素数只能除以1或它们自己)

在它找到一个素数后(这意味着它没有进入break语句,因为没有数字除以它),你必须增加self.start,在你现在找到的素数之后开始一个数字。然后返回素数

如果您不增加self.start,那么您将始终测试第一个素数

其他: 您的测试只测试大于2的素数,因为2%2等于零

对于以后的文章(尤其是python代码),请确保您的选项卡正确。您的代码应该如下所示:

class PrimeGenerator:

  def __init__(self, stop):
    self.stop = stop
    self.start=2
    self.number=0

  def __next__(self):
    for self.number in range(self.start,self.stop):
      for x in range(2, self.number):
        if self.number % x == 0:
          break
        else:
          self.start=self.number+1
          return self.number                 


obj = PrimeGenerator(7)
print(next(obj))

所以下次我们求一个值时,我们从我们找到的最后一个素数开始加1?试着对它进行评论,看看行为是如何变化的。你已经打破了逻辑——else属于for,而不是if。