【问题标题】:Why I can't use a method class as a generator?为什么我不能使用方法类作为生成器?
【发布时间】:2018-09-16 10:04:04
【问题描述】:

我的处境很奇怪。我知道我可以像以前那样使用方法类作为生成器。 在另一个问题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'对象不是迭代器

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

【问题讨论】:

  • 为什么投反对票?我的问题到底有什么问题?
  • 线索在“'method'对象不是迭代器”...你需要调用方法...it = a.first_ten()然后使用例如next(it)...或者for n in a.first_ten(): print(a)等..

标签: python python-3.x generator


【解决方案1】:

你需要调用方法:

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

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

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

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

【讨论】:

  • 另一种可以避免调用的替代方法是,如果它被声明为@property
猜你喜欢
  • 2014-01-15
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多