首页 > 解决方案 > 为什么我不能使用方法类作为生成器?

问题描述

我处于一个非常奇怪的境地。我知道我可以像以前那样使用方法类作为生成器。在另一个问题中,类中的方法可以生成器吗?有人要求同样的事情,他们说是的,可以做到。

但是,当我尝试时出现错误。这是一个最小的例子:

class SomeClass(object):
    def first_ten(self):
        for i in range(10):
            yield i

a = SomeClass();
next(a.first_ten)

“方法”对象不是迭代器

为什么?这怎么可能?谢谢编辑:固定代码缩进

标签: pythonpython-3.xgenerator

解决方案


您需要调用该方法:

a = SomeClass()
it = a.first_ten()
next(it)

原因是该方法本身不是生成器。它是一个生成器函数,每次调用时都会返回一个新的生成器。

这同样适用于非方法生成器函数。请注意此代码段中的类型:

>>> def f():
...     yield from range(10)
...
>>> type(f)
<class 'function'>
>>> type(f())
<class 'generator'>

推荐阅读