生成器赋值问题

新手上路,请多包涵

1.在看廖雪峰python教程时,发现生成器只有在赋值后,才能打印完整结果
2.代码如下
def odd():

print('step 1')
yield 1
print('step 2')
yield(3)
print('step 3')
yield(5)

g=odd()
for i in range (3):

print(next(g))

3.若把print语句换成如下代码
def odd():

print('step 1')
yield 1
print('step 2')
yield(3)
print('step 3')
yield(5)

for i in range (3):

print(next(odd()))
只能打印step1

4.我理解的是odd()和g应该是相同的,为什么打印结果会不同呢?

阅读 2.8k
2 个回答

调用生成器函数会返回generator对象,每次调用odd函数会重新产生新的对象,所以每次next只会打印第一个

g是odd()执行后的一个生成器对象

可以使用type(g)查看,返回结果是generator,

odd()表示一次函数调用,每一次调用都会生成一个新的生成器对象

在for循环中,每一次调用odd()都会生成一个新的生成器对象。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题