400-650-7353

精品课程

您所在的位置:首页 > IT干货资料 > python > 【Python基础知识】Python生成器函数

【Python基础知识】Python生成器函数

  • 发布: python培训
  • 来源:python干货资料
  • 2020-11-06 15:33:33
  • 阅读()
  • 分享
  • 手机端入口

对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的。

可以采用生成器推导式来解决内存不足的问题。例如,利用生成器推导式创建一个生成器n,数据为1~33数字,可以写成n = (i for i in range(1, 34))。这样当程序需要一个数时,程序才生成数据,可以节省内存。然而生成器推导式太过简单,只能用一行代码的形式实现,如果要创建复杂的生成器,如创建一个生成器f,生成前10个斐波那契数字,生成器推导式已经不能满足需求了,因为斐波那契数列最开始的两个数都无法赋值。

函数可以实现复杂的功能,然而要节省内存,就需要使用生成器函数。生成器函数与普通函数的区别是函数中包含关键字yield。实际上只要含有yield关键字的函数就是生成器函数。

生成器函数是用函数实现生成器。定义生成器函数的语法格式如下:

  1. >>> def fib():   # 定义生成器函数 
  2. ...     a, b = 11   # 定义初始值 
  3. ...     while True
  4. ...         yield a   # 暂停执行,返回一个新变量值 
  5. ...         a, b = b, a+b 
  6. ... 
  7. >>> a= fib()   # 调用生成器函数 
  8. >>> for i in range(10): 
  9. ...     print(next(a))   # 调用生成器函数的yield生成值 
  10. ... 
  11. 1 
  12. 1 
  13. 2 
  14. 3 
  15. 5 
  16. 8 
  17. 13 
  18. 21 
  19. 34 
  20. 55 

def 函数名(参数):

函数体

yield 变量名

函数体

由语法格式可知,生成器函数与普通函数的区别在于函数体部分,生成器函数的函数体含有“yield 变量名”语句。yield的功能类似于return,return是函数返回值,yield的功能也是返回变量,但是它仅返回变量而不退出函数,因此,yield可以看作是多次返回变量且不会退出函数的return。

在调用生成器函数时,写上函数名与参数,并通过一个变量接收返回值,语法格式如下:

变量名 = 函数名(参数)

调用生成器函数的yield生成值的第一种方法如下:

next(变量名)

第二种方法如下:

变量名.__next__()

在掌握了生成器函数的定义和调用之后,就可以使用生成器函数实现生成前10个斐波那契数字的案例了。这个案例主要分为三步,第一步是定义生成器函数,第二步是调用并赋值,第三步是打印结果,代码如下:

在上述程序中,首先定义生成器函数fib(),函数内先定义斐波那契数列的两个初始值,再写一个while True死循环。这个死循环有些特别,先是用yield生成待使用的数字,再通过赋值语句“a, b = b, a+b”将b的值赋给a,将a+b的值赋给b,每次循环都是如此。然后调用生成器函数fib(),再调用生成器函数的yield生成值,最后打印结果。由于需要生成前10个斐波那契数字,因此可以采用for循环,每循环一次生成并打印一个斐波那契数字,共循环10次。第一次循环时,调用yield生成值a,即1;第二次循环时,调用yield生成值a,a被赋值成b的值,即1,而b被赋值成a+b的值,即2;第三次循环时,调用yield生成值a,a被赋值成b的值,而此时b的值是上次赋值的a+b的值,即2……以此类推,就得到了整个斐波那契数列。

如果对Python开发感兴趣或者想要深入学习的现在可以免费领取学习大礼包哦(点击领取80G课程资料 备注:领资料)。

课程好礼申请领取
您的姓名
您的电话
意向课程
 

中公优就业

官方QQ

扫描上方二维码或点击一键加群,免费领取价值599元网课,加群暗号:599。 一键加群

>>本文地址:
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

推荐阅读

优就业:ujiuye

关注中公优就业官方微信

  • 关注微信回复关键词“大礼包”,领80G学习资料
QQ交流群
领取免费网课
(加群备注“网站”)
IT培训交流群 加入群聊 +
软件测试 加入群聊 +
全链路UI/UE设计 加入群聊 +
Python+人工智能 加入群聊 +
互联网营销 加入群聊 +
Java开发 加入群聊 +
PHP开发 加入群聊 +
VR/AR游戏开发 加入群聊 +
大前端 加入群聊 +
大数据 加入群聊 +
Linux云计算 加入群聊 +
优就业官方微信
扫码回复关键词“大礼包”
领取80G学习资料

编程入门优选课
1元购买
12.1-12.12限时购
1元购买
课程资料、活动优惠 领取通道