Python中的可移植性

2024-09-26 22:52:37 发布

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

我试图理解Python中的Iterability。在

据我所知,__iter__()应该返回一个定义了next()方法的对象,该对象必须返回值或引发StopIteration异常。因此,我编写了一个满足这两个条件的类。在

但似乎行不通。怎么了?在

class Iterator:
    def __init__(self):
        self.i = 1

    def __iter__(self):
        return self

    def next(self):
        if self.i < 5:
            return self.i
        else:
            raise StopIteration

if __name__ == __main__:
    ai = Iterator()
    b  = [i for i in ai]
    print b

Tags: 对象方法selfreturnif定义def条件
3条回答

迭代器类是正确的。你只是在这句话中有个错误:

if __name__ ==' __main__':

在''uu main\'u'字符串中有一个前导空格。这就是为什么你的代码根本不执行。在

如果不在next()中递增,i永远不会大于5

你当前的代码似乎有效。相反,我将向您展示更多的迭代器/生成器。在

最简单的内建物就是你的行为。在

Iterator2 = xrange(2,5)

将类直接转换为生成器

^{pr2}$

由python标准库中的生成器组成的生成器

import itertools
Iterator4 = itertools.takewhile( 
                        lambda y : y < 5, 
                        itertools.count(2) )

一个简单的生成器表达式(不太令人兴奋…)

Iterator5 = ( x for x in [2, 3, 4] )

相关问题 更多 >

    热门问题