Iterability in Python
我试图理解Python中的Iterability。
据我所知,
但它似乎不起作用。怎么了?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 |
迭代器类是正确的。你在这句话中有错别字:
1 | if __name__ ==' __main__': |
在"uu main"字符串中有一个前导空格。这就是为什么您的代码根本不被执行的原因。
我认为在大多数情况下,编写一个使用yield的生成器函数,而不是编写一个成熟的迭代器就足够了。
如果不在EDOCX1[1]中增加,EDOCX1[0]将永远不会大于5。
您当前的代码似乎有效。相反,我将向您展示更多的迭代器/生成器。
最简单的内置与您的行为。
1 | Iterator2 = xrange(2,5) |
将类直接转换为生成器
1 2 3 4 5 | def Iterator3(): i = 1 while i < 5: i += 1 yield i |
由Python标准库中的生成器组成的生成器
1 2 3 4 | import itertools Iterator4 = itertools.takewhile( lambda y : y < 5, itertools.count(2) ) |
一个简单的生成器表达式(不太令人兴奋…)
1 | Iterator5 = ( x for x in [2, 3, 4] ) |
您的代码有两个问题:
if name == '__main__' (缺少引号)def next . . . :任何地方都不增加i 。