Python3之高级特性:通过斐波那契数列讲解yield工作原理

您所在的位置:网站首页 python3斐波那契数列 Python3之高级特性:通过斐波那契数列讲解yield工作原理

Python3之高级特性:通过斐波那契数列讲解yield工作原理

2023-08-17 10:17| 来源: 网络整理| 查看: 265

我们现在通过一个列子来讲一讲yield的工作原理

示例1:斐波那契数列通过yield实现

def Fab(n): """ 使用yield来返回值;用非递归来实现斐波那契数列,使用yield来返回值, """ a, b, m = 0, 1, 0 i = 1 while m < n: yield b a, b, m = b, a+b, m+1 print("m值为: ", m, "\n") i += 1 t = Fab(10) print("变量t的类型为: ", type(t), "\n") num = 1 for i in t: print('Fab(%d)' % num, i) num += 1

输出结果:

变量t的类型为: fab(1) 1 m值为: 1 fab(2) 1 m值为: 2 fab(3) 2 m值为: 3 fab(4) 3 m值为: 4 fab(5) 5 m值为: 5 fab(6) 8 m值为: 6 fab(7) 13 m值为: 7 fab(8) 21 m值为: 8 fab(9) 34 m值为: 9 fab(10) 55 m值为: 10

1、函数中有yield语句就代表该函数就是一个生成器

2、这个例子中Feb(n)函数就是我们自定义的一个生成器,而Feb中所有语句就是用来定义该生成器用于生成具有什么样特点的数据,这个例子旨在为了获取斐波那契数列数列的值。这个例子的斐波那契数列生成器,定义了只能生成1~n的斐波那契数列数列的值。

3、例子中的变量t就是一个生成器类型的数据 我们可以通过type(t)查看

4、当程序执行到语句t = Feb(10)时,此时开始进入函数Feb(n),当运行到yield语句的时候,此时就是暂停(就进入了阻塞状态)执行yield语句后面的其他语句,这里就有点类似于return,只不过return会结束整个函数的执行,而yield只是让函数进入阻塞状态),此时就返回到了语句t = Feb(10)(注意了:这里进行的返回,只是语句上的跳转,即:只是返回语句t = Feb(10)继续执行)与此同时生成去生成了第一个斐波那契数列数列,即:fab(1)=1。然后执行 print("变量t的类型为: ", type(t), "\n")。接着执行for循环,这个for循环的作用,就是依次取从n为:1~10的斐波那契数列的值。在for i in t 就是让我们依次从生成器中生成1~10的斐波那契数列,当for循环进行第一次循环时,打印出:fab(1) 1,然后进入第二次for循环,执行到for i in t时(这里需要使用工生成器生成第二个斐波那契数列),此时就会返回yield语句,就会从之前暂停出开始执行,即从语句a, b, m = b, a+b, m+1执行知道执行下一个while循环,遇到yield语句暂停执行,返回到for循环执行语句print('Fab(%d)' % num, i),接着执行第三次for循环,返回yield语句..., 以此类推。

 

以上就是本人自身的简介,不知能不能带来帮助 ^^

有一篇好的不错的讲解yield的文章可以参考:

https://blog.csdn.net/mieleizhi0522/article/details/82142856

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3