Python之路23-迭代器

#迭代器
#可直接作用于for循环的数据类型
#一类是集合数据类型,list,tuple,dict,set,str
#一类是generator,包括生成器和带yield的generator function
#这些可以直接作用于for循环的对象统称为可迭代对象:Iterable
#可以使用isinstance()判断一个对象是否是Iterable对象

from collections import Iterable
print (isinstance("abc",Iterable))

#生成器不仅可以作用for循环,还可以被next()函数不断调用并返回
#一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值
#可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
#可以使用isinstance()判断一个对象是否是Iterator对象

from collections import Iterator
print (isinstance((x for x in range(10)),Iterator))

#生成器都是Iterator对象,但list、dict、str等虽然是可迭代的,但
#不是一个迭代器
#把可迭代对象变成迭代器可以使用iter()函数

from collections import Iterable,Iterator
print (isinstance([],Iterable))
print (isinstance([],Iterator))
print (isinstance(iter([]),Iterable))

#为什么list、dict等数据类型不是一个迭代器
#因为Python的迭代器对象表示的是一个数据流,迭代器对象可以被
#next()函数调用并不断返回下一个数据,直到没有数据抛出
#StopIteration错误,可以把这个数据流看成是一个有序序列,但
#我们却不能提前知道序列长度,只能不断通过next()函数实现按需
#计算下一个数据,所以迭代器计算是惰性的,只有在需要返回下一个
#数据时它才会计算
#迭代器甚至可以表示一个无限大的数据流

#总结
#凡是可作用与for循环的对象都是可迭代对象
#凡是可作用于next()函数的对象都是迭代器类型,表示一个惰性计算的序列
#集合数据类型是可迭代对象,但不是迭代器,可通过iter()函数
#获得一个迭代器对象
#Python的for循环本质上是通过不断调用next()函数实现的
for i in range():
    print (i)
import time

def consumer(name):
    print ("%s 准备吃包子啦!" % name)
    while True:
        baozi = yield
        print ("包子[%s]来了,被[%s]吃了" % (baozi,name))

def producer():
    c1 = consumer("Jack")
    c2 = consumer("Tom")
    c1.__next__()
    c2.__next__()
    for i in range(1,11):
        time.sleep(1)
        print ("做好1个包子,分成两份!")
        c1.send(i)
        c2.send(i)
producer()
时间: 2024-10-14 20:45:12

Python之路23-迭代器的相关文章

Python不归路_迭代器

迭代器: for循环可以对两类数据类型进行迭代: 1.比如list.tuple.dict.set等 2.带有yield关键字的函数或者能用__next__()进行调用的,也就是生成器 能被for调用的对象都是Iterable的,可以使用isinstance方法验证是不是Iterable from collections import Iterable a=[1,'b','c'] b={'name':'gally','age':23} isinstance(a,Iterable) isinstan

Python之路:迭代器和yield生成器

一.迭代器 对于Python 列表的 for 循环,他的内部原理:查看下一个元素是否存在,如果存在,则取出,如果不存在,则报异常 StopIteration.(python内部对异常已处理) 使用迭代器一个显而易见的好处就是:每次只从对象中读取一条数据,不会造成内存的过大开销. 比如要逐行读取一个文件的内容,利用readlines()方法,我们可以这么写: for line in open("test.txt").readlines():print line 这样虽然可以工作,但不是最

python之路(八)-迭代器&生成器

迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问

python之路---23 模块 os sys pickle json

一.   os模块 主要是针对操作系统的 用于文件操作 二.    sys 模块 模块的查找路径   sys.path 三   pickle 模块 1.  pickle.dumps(对象) 序列化  把对象拍散成字节 2.pickle.loads(字节) 反序列化,把字节整合成对象 3.pickle.dump(对象,文件) 把对象打散写入到文件, 序列化的内容不是给人看的 多个对象时  可以存入列表 4.pickle.load(文件) 读取文件 四.  json 模块 可以认为是python中的

Python学习之路8?迭代器协议和生成器

一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法) 3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象. 二 python中强大的for循环机制 for循环的本质:循环所有对象,全

python之路,Day24 常用设计模式学习

python之路,Day24 常用设计模式学习 本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一

python之路--模块--景丽洋

python之路--常用模块 阅读目录 认识模块 什么是模块 模块的导入和使用 常用模块一 collections模块 时间模块 random模块 os模块 sys模块 序列化模块 re模块 常用模块二 hashlib模块 configparse模块 logging模块 认识模块 返回顶部 什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(

Python之路【第十七篇】:Django【进阶篇 】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.