调用next(generator)报'function' object is not an iterator原因是什么
错误原因
- 你定义的
generator是生成器函数本身,不是迭代器对象。带yield关键字的生成器函数,必须主动调用后才会返回可迭代的生成器实例,直接对函数对象调用next()就会触发TypeError: 'function' object is not an iterator报错。 - 你原本的写法里每次都传入函数名
generator,没有执行函数,自然无法触发yield逻辑返回值。就算你每次写next(generator())也不对,会每次重新创建生成器实例,每次都返回1,达不到依次输出1、2、3、4的效果。
修复后的代码
def generator(): yield 1 yield 2 yield 3 yield 4 # 先调用生成器函数,拿到迭代器实例复用 gen = generator() print(next(gen)) print(next(gen)) print(next(gen)) print(next(gen))
运行上述代码就会输出你预期的1、2、3、4。
内容的提问来源于stack exchange,提问作者Mjd Almalti
相关产品推荐
相关产品推荐

