【问题标题】:'function' object is not an iterator [duplicate]'function'对象不是迭代器[重复]
【发布时间】:2021-10-27 18:02:31
【问题描述】:
def generator():
    yield 1
    yield 2
    yield 3
    yield 4
    
print(next(generator))
print(next(generator))
print(next(generator))
print(next(generator))

vs 的错误是 打印(下一个(生成器)) TypeError: 'function' 对象不是迭代器

我认为输出应该是 1 2 3 4

那么为什么会发生这个错误?

【问题讨论】:

  • 因为正如它所说,generator 是一个函数,而不是一个迭代器。它是一个生成器函数,所以它返回一个迭代器(一个生成器)
  • "generator" 是一个生成器函数,它在调用时返回一个生成器(也可用作迭代器)。
  • 欢迎来到 Stack Overflow。链接的副本不是同一个问题,但它会向您展示使用生成器的几个正确示例。不过,这里有一个快速提示:想象一下,如果你写的是def generator(x):。你认为x 的价值来自哪里?另一种了解生成器如何工作的方法是尝试输入python generator tutorialinto a search engine,或阅读documentation(我承认最后一部分很难找到)。

标签: python python-3.x


【解决方案1】:

您将“生成器”定义为一个返回生成器的函数,您可以在接下来调用该生成器

def get_generator()
    yield 1
    yield 2

generator = get_generator()
first_value = next(generator)
print(first_value)

【讨论】:

    【解决方案2】:

    相信自己

    generated = generator()
    print(generated)
    print(next(generated))
    

    你需要调用方法来开始迭代它的结果

    【讨论】:

      【解决方案3】:

      这是正确的版本:

      def generator():
          yield 1
          yield 2
          yield 3
          yield 4
      
      iterator = generator()
      
      print(next(iterator))
      print(next(iterator))
      print(next(iterator))
      print(next(iterator))
      

      包含yield 语句的函数是生成器。然而,next 需要一个 generator iterator。

      生成器创建生成器迭代器。

      有关详细信息,请在此处查找 generators 和 generator iterators 之间的区别: https://docs.python.org/3/glossary.html#term-generator

      【讨论】:

      • 是的,更好。通常我什么都不说,人们使用这些术语与这些定义有很多不同,只是你如此强烈而明确地反对它:-)
      • 不,请说点什么:) 我想我们都是来学习的,包括我在内。
      猜你喜欢
      • 2018-11-17
      • 1970-01-01
      • 2016-07-31
      • 2014-05-03
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      相关资源
      最近更新 更多