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

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

生成器:1.只有在调用时才会生成相应的数据2.只记录当前位置 只有一个__next__()方法   next()
1 #列表生成式:2 [x*2 for x in range(10)]3 print([x*2 for x in range(10)])4 #生成器:5 g = (x*2 for x in range(10))6 print(g)#output:
at 0x000001FF205E93B8>
斐波那契数列:
1 def fib(max): 2     n, a, b = 0, 0, 1 3     while n
函数是顺序执行,遇到return语句或者最后一行函数语句就返回。 而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回, 再次执行时从上次返回的yield语句处继续执行。yield相当于一个“断点”。 生成器并行:
1 #Accounting:生产者生产包子同时分给两个人 2 import time 3 def consumer(name): 4     print("%s准备吃包子"%name) 5     while True: 6         baozi = yield 7         print("包子%s来了,被%s吃了"%(baozi,name)) 8  9 10 def producer(name):11     c = consumer("A")#生成两个消费者12     c2 = consumer("B")13     c.__next__()#初始化,准备好吃包子14     c2.__next__()15     print("包子准备!!!")16     for i in range(10):#生产者循环10次,每次生产两个包子分给消费者17         time.sleep(1)18         print("做好了两个包子了")19         c.send(i)#send()函数唤醒yield,并向yield传递参数20         c2.send(i)21 producer("sugar")

迭代器:可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list、tuple、dict、set、str等; 一类是generator,包括生成器和带yield的generator function。 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。 可以使用isinstance()判断一个对象是否是Iterable对象:
1 from collections import Iterable2 isinstance([], Iterable)#output:True
凡是可作用于for循环的对象都是Iterable类型; 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列; 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象
1 from collections import Iterable2 isinstance(iter([]), Iterator)#output:True

生成器本质上属于的迭代器。

 
 
 
 
 

转载于:https://www.cnblogs.com/sugar2019/p/10310245.html

你可能感兴趣的文章
自动化思维
查看>>
Python学习之路-Day1-Python基础
查看>>
jenkins
查看>>
js数组操作大全
查看>>
嵌入在html页面中图像格式的区别与选用
查看>>
nginx+php在调试过程中临时关闭缓存
查看>>
2017.11.2总结,回顾及成果
查看>>
DDD:聚合根的批量删除是不是可以批量发送请求
查看>>
springmvc 文件上传
查看>>
centos7+tomcat部署JavaWeb项目超详细步骤
查看>>
JAVA基础-网络编程
查看>>
MAC上postman离线安装时提示加载扩展程序出错怎么办?
查看>>
Problem A: 零起点学算法80——逆序输出(数组练习)
查看>>
C++程序设计原理与实践 第二十章部分答案
查看>>
执行PHP -m报错Xdebug MUST be loaded as a Zend extension
查看>>
java学习之旅(一):BOS项目使用的技术以及开发环境
查看>>
有关锚点[转载]
查看>>
剑指offer——二进制中1的个数
查看>>
spring boot 使用redis 报错
查看>>
管窥HTML5
查看>>