鱼C论坛

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

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

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

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

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

x
以下是我在IDLE定义的简单生成器:
>>> def Fib():
        a=0
        b=1
        while True:
                a,b=b,a+b
                yield a
我发现Fib()类型就为生成器:
>>> type(Fib())
<class 'generator'>
但是无法正常使用next方法:
>>> next(Fib())
1
>>> 
>>> next(Fib())
1
>>> next(Fib())
1
>>> next(Fib())
1
>>> next(Fib())
1
但如果将Fib()指向一个变量就可以正常使用next方法:
>>> fib=Fib()
>>> next(fib)
1
>>> next(fib)
1
>>> next(fib)
2
>>> next(fib)
3
但是两种方式都可以正常使用for 循环:
for i in Fib():
        pirnt(i)
for i in fib:
        print(i)
请问这是怎么回事?
最佳答案
2017-12-16 10:25:00
直接每次next(Fib()),其实是每次都重新生成一个对象,所以都是指向1,其他情况都是在一个对象里操作,所以正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2017-12-16 11:16:57 From FishC Mobile | 显示全部楼层
试试__next__
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 09:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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