鱼C论坛

 找回密码
 立即注册
查看: 1299|回复: 2

[已解决]生成器的next方法的问题

[复制链接]
发表于 2017-12-16 09:26:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下是我在IDLE定义的简单生成器:
  1. >>> def Fib():
  2.         a=0
  3.         b=1
  4.         while True:
  5.                 a,b=b,a+b
  6.                 yield a
复制代码

我发现Fib()类型就为生成器:
  1. >>> type(Fib())
  2. <class 'generator'>
复制代码

但是无法正常使用next方法:
  1. >>> next(Fib())
  2. 1
  3. >>>
  4. >>> next(Fib())
  5. 1
  6. >>> next(Fib())
  7. 1
  8. >>> next(Fib())
  9. 1
  10. >>> next(Fib())
  11. 1
复制代码

但如果将Fib()指向一个变量就可以正常使用next方法:
  1. >>> fib=Fib()
  2. >>> next(fib)
  3. 1
  4. >>> next(fib)
  5. 1
  6. >>> next(fib)
  7. 2
  8. >>> next(fib)
  9. 3
复制代码

但是两种方式都可以正常使用for 循环:
for i in Fib():
        pirnt(i)
for i in fib:
        print(i)
请问这是怎么回事?
最佳答案
2017-12-16 10:25:00
直接每次next(Fib()),其实是每次都重新生成一个对象,所以都是指向1,其他情况都是在一个对象里操作,所以正常
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-16 10:25:00 | 显示全部楼层    本楼为最佳答案   
直接每次next(Fib()),其实是每次都重新生成一个对象,所以都是指向1,其他情况都是在一个对象里操作,所以正常
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-16 11:16:57 From FishC Mobile | 显示全部楼层
试试__next__
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-4 20:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表