代码之家  ›  专栏  ›  技术社区  ›  Vaaal88

为什么我不能使用方法类作为生成器?

  •  -2
  • Vaaal88  · 技术社区  · 6 年前

    我的处境很奇怪。我知道我可以像以前一样使用方法类作为生成器。 在另一个问题上 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)
    

    为什么?这怎么可能? 谢谢你

    1 回复  |  直到 6 年前
        1
  •  3
  •   Mikhail Burshteyn    6 年前

    您需要调用以下方法:

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

    原因是该方法本身不是生成器。它是一个 发电机功能 每次调用时都返回一个新的生成器。

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

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