我处境很奇怪。我知道我可以使用方法类作为生成器,就像我之前所做的那样。在另一个问题Can a method within a class be generator?有人要求同样的事情,他们说是的,它可以做到。
但是,当我尝试它时,我收到一个错误。这是一个最小的例子:
class SomeClass(object):
def first_ten(self):
for i in range(10):
yield i
a = SomeClass();
next(a.first_ten)
'method'对象不是迭代器
为什么?这怎么可能?谢谢编辑:固定代码缩进
你需要调用方法:
a = SomeClass()
it = a.first_ten()
next(it)
原因是该方法本身不是发电机。它是一个生成器函数,每次调用它时都会返回一个新生成器。
这同样适用于非方法生成器函数。请注意此代码段中的类型:
>>> def f():
... yield from range(10)
...
>>> type(f)
<class 'function'>
>>> type(f())
<class 'generator'>