繁体   English   中英

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

[英]why does my program return None in for loop?

我有一个功能,应该在给定的间隔内打印正方形:

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,但是输出为:

None
None
None
None
9
None
None
None
None
None
None
16
None
None
None
None
None
None
None
None
25
None
None
None
None
None
None
None
None
None
None
36
None
None
None
None
None
None
None
None
None
None
None
None
49
None

为什么是这样?

返回每次变量的结果是不是一个完美的正方形,其原因是,如果没有指定回报下一个()函数返回默认。

如果必须为此项目使用迭代器,则必须构造代码,以便每次通过都返回一个值。

此外,请注意,每次调用next()时,都会生成一个名为a_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) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM