生成器、迭代器
来源:互联网 发布:javascript的continue 编辑:程序博客网 时间:2024/05/20 16:33
一、生成器generator
1、生成器的创建方式
①(x**2 for x in range(10)) ②通过yield关键字创建
举例:
a = (x**2 for x in range(10))print(a) #<generator object <genexpr> at 0x0000026F6DA1E1A8>
def foo(): print('hello') yield 1 #yield相当于return的作用print(foo) #<function foo at 0x000001C8452AE7B8>b = foo()print(b) #<generator object foo at 0x000002093A79E258>
备注:
如果只是print(foo),还是个函数,但是后面一加括号以后就变成了一个生成器
2、调用方式 ( next() 或者 _next_() 或者 通过for循环 )
备注:for循环后面跟的是可迭代对象
3、可迭代对象
拥有inter方法的对象称为可迭代对象(列表,字典,元组,集合,字符串,生成器,迭代器等)
a = [1,2,3,4]print(a.__iter__()) #<list_iterator object at 0x000002288CAAD4A8>b = (1,2,3,4)print(b.__iter__()) #<tuple_iterator object at 0x00000229D9AFD7F0>c = {'name':'tom'}print(c.__iter__()) #<dict_keyiterator object at 0x00000229D9B1CEF8>
备注:_iter_() 方法等同于iter()
四、斐波那契序列
def fib(max): n,before,after = 0,0,1 while n < max: print(after) #yeild after #如果把print改成yeild,就变成了一个生成器 before,after = after ,before + after n += 1
五、send方法
send可以往函数里面传值,如果第一次没有next,只能传一个send(None),
def f(): print('hello1') count = yield print(count) print('hello2') yield 1a=f()a.send(None) #相当于next(a)res = a.send('tom')print(res) #这个值是1
备注:先返回后传值
六、通过yield实现并发效果
import timedef consumer(name): print("%s 准备吃包子啦!" %name) while True: baozi = yield print("包子[%s]来了,被[%s]吃了!" %(baozi,name))def producer(name): c1 = consumer('A') c2 = consumer('B') next(c1) next(c2) print("%s开始准备做包子啦!" % name) for i in range(10): time.sleep(1) print("做了2个包子!") c1.send(i) c2.send(i)producer("tom")
二、迭代器iterator
生成器都是迭代器,但是迭代器不一定都是生成器,判断一个对象是否是迭代器对象,一是要有iter方法,而是由next方法
a = [1,2,3,4]d= iter(a)print(d)print(next(d))print(next(d))print(next(d))print(next(d))
for循环帮忙做的三件事:
①调用可迭代对象的iter方法返回一个迭代器对象
②不断调用迭代器对象的next方法
③处理异常
补充内容:
1、匿名函数
匿名函数命名规格,用lambda关键字标识,冒号(:)左侧表示函数接收的参数(a,b),冒号(:)右侧表示函数的返回值
res = lambda a,b:a+bprint(res(2,3)) #5
2、列表生成式
a = [x**2 for x in range(10)]print(a) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
阅读全文
0 0
- 迭代器 生成器
- 迭代器,生成器
- 迭代器 生成器
- 生成器、迭代器
- 迭代器、生成器
- 生成器&迭代器
- 生成器迭代器
- 生成器&迭代器
- 生成器,迭代器
- python 迭代器 生成器 生成器表达式
- 迭代器、生成器、迭代器
- python迭代器和生成器
- pyhton 迭代器和生成器
- 迭代器和生成器
- 迭代器和生成器
- 迭代器与生成器
- Python 迭代器和生成器
- Python 迭代器 生成器
- 欢迎使用CSDN-markdown编辑器
- 原型模式
- Android进阶#(6/12)让程序更优的技术——性能优化_布局优化
- jQuery的append/prepend和after/before有什么区别?
- MAVEN 引入jar包没问题,但是程序中使用jar中的类报错的坑
- 生成器、迭代器
- spring boot 解决无法访问静态资源
- rabbitMQ入门
- BZOJ 4989: [Usaco2017 Feb]Why Did the Cow Cross the Road 逆序对
- oracle 学习笔记
- Linux命令大全(手册)_Linux常用命令行实例详解_Linux命令学习手册
- (转)Db2 数据库性能优化中,十个共性问题及难点的处理经验
- 【英语】参加小黑屋总结
- android软键盘遮挡WebView中input的解决方案