Python生成器和迭代器理解:Python3:不是生成器的迭代器

我试图理解迭代器和生成器之间的区别。我读到“每个生成器都是一个迭代器,但反之亦然。”

有人可以给出一个对象的例子,它是一个迭代器,但不是一个生成器?

我的意思是,如果一个对象具有方法next(这是迭代器的定义),我们也可以将其称为生成器,不是吗?

UPD:对于那些说生成器必须具有yield的人-并不总是。(i * * 2 为 i 在范围(1,5))没有产量,也是一个发电机。

对于那些说 iter([1,2,3])不是生成器的人-为什么?

0

“每个生成器都是一个迭代器,但反之亦然。

Python glossary给出了 3 个以“generator”开头的条目。

发电机

这是任何带有yield语句的函数。生成器函数不是迭代器,但在调用它时返回迭代器。

def getSquares(n):
    for i in range(n):
        yield i**2

生成器迭代器

这是由生成器函数返回的东西。

生成器表达式

这只是括号内的理解。

(i**2 for i in range(10))

当你对它们调用type时,生成器表达式和生成器函数的返回值都给出<cl 'generator'>。但是,如果你用__next__方法定义你自己的类,它的实例当然会将该类作为它们的type

0

有人可以给出一个对象的例子,它是一个迭代器,但不是一个生成器?

Python 中的 Generator 通常表示一个函数,但也可以表示由该函数创建的迭代器。

有人可以给出一个对象的例子,它是一个迭代器,但不是一个生成器迭代器?

这里是:

cl MyIterator:
    def __init__(self):
        self.n = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self.n == 4:
            raise StopIteration
        n, self.n = self.n, self.n + 1
        return n
it = MyIterator()
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(32)
Core文件怎么查看:Angular:core.module样式怎么了
上一篇
Js贪吃蛇代码:Python贪吃蛇游戏数学
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(38条)