博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生成器与迭代器
阅读量:6517 次
发布时间:2019-06-24

本文共 1266 字,大约阅读时间需要 4 分钟。

生成器:

1.只有在调用时才会生成相应的数据

2.只记录当前位置

3.使用__next__()方法调用

1 b=( i*2 for i in range(10))2 print(b.__next__())3 print(b.__next__())4 print(b.__next__())

结果:

 

使用生成器生成斐波拉契数列:

1 def fib(max): 2     n,a,b=0,0,1 3     while n

运行结果:

 

运用生成器实现并行:

1 import time 2 def consumer(name1): 3     print('%s准备吃包子' % name1) 4     while True: 5         buns_stuffing=yield 6         print('一个%s馅包子被%s吃了' % (buns_stuffing,name1)) 7  8 # c=consumer('Tom') 9 # c.__next__()#调用yield10 # c.send('韭菜')#调用yield并传值11 # c.send('白菜')12 13 def producer(name2):14     c1=consumer('Tom')15     c2=consumer('Bob')16     c1.__next__()#通过next命令让consumer开始准备,走到yield中断17     c2.__next__()18     print('%s准备做包子' % name2)19     list_of_bunstsuffing=['韭菜','白菜','芹菜']20     for suffing in list_of_bunstsuffing:21         time.sleep(1)22         print('做了两个%s馅的包子' % suffing)23         c1.send(suffing) #发送24         c2.send(suffing)25 producer('Tao')

运行结果:

 

迭代器:

1.可以用于for循环的对象统称为可迭代对象:Iterable

2.可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。它表示惰性计算序列

3.生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator

4.把list、dict、str等Iterable变成Iterator可以使用iter()函数

5.Iterator对象是一个数据流,可被next()函数调用并返回下一个值。我们不知道整个序列的长度和下一个数据是多少只有需要时才会计算出下一个值

6.python中for循环本质就是通过不断调用next()函数实现的

转载于:https://www.cnblogs.com/BIT-taozhen/p/9806660.html

你可能感兴趣的文章
程序猿知道英语词汇
查看>>
数据存储(两)--SAX发动机XML记忆(附Demo)
查看>>
深入分析面向对象中的封装作用
查看>>
深刻理解Python中的元类(metaclass)
查看>>
Android View体系(六)从源码解析Activity的构成
查看>>
fnmatch源码阅读
查看>>
U9249 【模板】BSGS
查看>>
Node.js+Koa开发微信公众号个人笔记(一)准备工作
查看>>
Android 图片缓存处理
查看>>
阿里盒马领域驱动设计实践
查看>>
vuex 存值 及 取值 的操作
查看>>
如何在C#项目中使用NHibernate
查看>>
安装python包到指定虚拟环境
查看>>
力扣(LeetCode)21
查看>>
网页视频流m3u8/ts视频下载
查看>>
Python 基础起步 (十) 什么叫函数?
查看>>
5G一周热闻:华为夺联通5G大单,首张5G电话卡发放
查看>>
“迁移策略+新容器运行时”应对有状态应用的冷热迁移挑战
查看>>
使用Swoole加速Laravel(正式环境中)
查看>>
mockjs让前端开发独立于后端
查看>>