生成器:
简单的生成器实现:
1 #生成器,将for循环的变量传递到前面的式子进行处理 2 生成的并不是一个列表,而是一个存在算数规则的对象 3 不能通过下标直接取值,必须一个一个从头到尾取 4 va=(i*2 for i in range(10)) 5 print(va) 6 7 调用下一个,只记住当前位置,相当于有一个游标,只能向下 8 print(va.__next__()) 输出:0 9 输出:2 10 11 变量生成器 12 in va: 13 print(i) 输出:#4 6 8 10 12 14 16 18
生成器进阶:
def funx1(max): 2 m,x,y=0,1 3 while m<max: 4 print(y) #1 1 2 3 5 8 13 21 34 55 5 yield y 生成器输出,使用for循环或者next方法才会输出 6 x,y=y,(x+y) 7 m+=1 8 普通调用 10 funx1(10) 11 生成器调用 13 funx=funx1(10) 14 print(funx.__next__()) 15 print("----- 可输出 ------"16 取值方法1:",funx.17 取值方法2:生成器发送数据:funx1(): 2 while True: 如果不写则启动就结束了,不能继续发数据 3 res=yield 获取的结果:,res) 5 6 7 funx=funx1() 8 funx.send(None) 必须先启动生成器,无输出,也可以使用funx.__next__() 9 funx.send(------") 发送数据,输出:获取的结果: ------ 10 funx.send(******输出:获取的结果: ******迭代器:
表示一个数据流,可以无限大
可使用for循环的对象都是可迭代对象,如字符串、列表、字典等,可使用next(对象)的对象都是迭代器对象
可迭代对象可以通过iter方法变成迭代器对象
1 strx=abcdefghigk" 2 3 转换为迭代器 4 va=iter(strx) 5 6 print(next(va)) 输出:a 7 输出:b队列:
可自定义先入先出还是后人先出,数据一经取出就在队列里自动去除
import queue 2 先进先出 4 qlistx=queue.Queue(maxsize=5) #生成实例,参数maxsize表示最大数量,超过则阻塞,等待头取出 qlistx=queue.Queue() #生成实例 后进先出 8 qlistx=queue.LifoQueue() 生成实例 9 设置数据方法一 队列满则阻塞等待 13 qlistx.put(111111114 qlistx.put(222222215 设置数据方法二 超时则报异常 18 qlistx.put(33333319 20 print(qlistx.qsize()) 输出列表大小 21 22 取数据方法一 23 如果取到最后没有数据,将会一直处于阻塞 24 (qlistx.get()) 25 26 27 取值方法二 28 设置超时时间,超时则报异常 29 print(qlistx.get(timeout=130 31 32 取数据方法三 33 无数据不进行阻塞,如果无数据则报异常 34 print(qlistx.get_nowait())优先级存取值:
值越小则优先级越高,实现高优先级最先取出
queue qlistx=queue.PriorityQueue() qlistx.put((1,)) qlistx.put((-1,1)">)) qlistx.put((100,1)">99999999)) print(qlistx.get()) 输出:(-1,'2222222') 输出:(1,'1111111')版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。