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



在Generator中,我们为什么需要在这个程序中增加这个步骤?你能详细解释一下吗?

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%等于零。

对于未来的帖子(尤其是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))

最新更新