为什么我的程序在for循环中不返回None?

2024-04-24 00:24:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数可以在给定的时间间隔内打印正方形:

class Squares:

    def __init__(self, min, max):
        self.min = min
        self.max = max

    def __iter__(self):
        return self

    def __next__(self):
        a_list = []
        for i in range((self.max)+1):
            a_list += [i**2]

        if self.min <= self.max:
            if self.min in a_list:
                result = self.min
                self.min += 1
                return result
            else:
                self.min += 1

        else:
            raise StopIteration

import math

for i in Squares(5, 50):

    print(i) 

它应该打印9、16、25、49,但输出是:

^{pr2}$

为什么会这样?在


Tags: 函数inselffor间隔returnifdef
1条回答
网友
1楼 · 发布于 2024-04-24 00:24:16

每次变量结果不是完全平方时都返回None的原因是,如果未指定return,next()函数默认返回None。在

如果您必须在这个项目中使用迭代器,那么您必须构造代码,以便每次传递都返回一个值。在

另外,请注意,每次调用next()时,都会生成一个名为_list的全新数组,这相当低效。初始化该数组一次会更好。在

看看这个例子中的不同之处。在

class Squares:

def __init__(self, min, max):
    self.min = min
    self.max = max

def __iter__(self):
    self.a_list = []
    for i in range((self.max)+1):
        self.a_list += [i**2]
    self.iter_index = 0
    return self

def next(self):
    self.iter_index += 1
    if self.a_list[self.iter_index] > self.max:
        raise StopIteration
    else:
        return self.a_list[self.iter_index]

import math
import pdb

for i in Squares(5, 50):
    print(i) 

相关问题 更多 >