为了账号安全,请及时绑定邮箱和手机立即绑定

求大神解析

http://img1.sycdn.imooc.com//5db10a70000105d904000354.jpg

有大神能帮我解读一下这个代码吗?其他地方看到的,但是看不懂,尤其是最后while的那一段,求解

正在回答

1 回答

import sys

def fibonacci(n): #这是一个生成器函数因为里面包含了yield指令,这个函数是用来return斐波那契里面各个项的

    a, b , counter = 0, 1, 0 #分别给a, b , counter 赋值为 0, 1, 0

    while True: #循环指令

        if (counter > n):

            return #这段代码是用来关闭生成器的,因为是用return而不是yeild返回,如果再次使用next()方法会报错StopIteration异常。

        yield  a #yield和return方法都会返回一个值,不同的是生成器可以通过next()方法接着yield的位置执行代码

        a, b = b, a+b #这时候a就变成了b,而b变成了原先的a加原先的b

        counter += 1 #计数器+1,等到计数器大于n的时候就会触发return结束生成器

f = fibonacci(10) # f 会初始化这个生成器函数,

while True:

    try:

        print(next(f), end ='')#这里打印出下一个返回值,在count > n 之前都是由yield返回的b

    except StopIteration:#就像之前说的,当是由return返回值的时候,再使用next()就会报错StopIteration

        sys.exit() #退出程序

0 回复 有任何疑惑可以回复我~
#1

慕娘0429976

因为是next()是接着yield指令后执行的,所以不会重新初始化a,b,counter
2019-11-03 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758625    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

求大神解析

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信