生成器:

简单的生成器实现:

  1. #生成器,将for循环的变量传递到前面的式子进行处理
  2. #生成的并不是一个列表,而是一个存在算数规则的对象
  3. #不能通过下标直接取值,必须一个一个从头到尾取
  4. va=(i*2 for i in range(10))
  5. print(va)
  6.  
  7. #调用下一个,只记住当前位置,相当于有一个游标,只能向下
  8. print(va.__next__()) #输出:0
  9. print(va.__next__()) #输出:2
  10.  
  11. #变量生成器
  12. for i in va:
  13. print(i) #输出:#4 6 8 10 12 14 16 18

生成器进阶:

  1. def funx1(max):
  2. m,x,y=0,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.  
  9. #普通调用
  10. #funx1(10)
  11.  
  12. #生成器调用
  13. funx=funx1(10)
  14. print(funx.__next__())
  15. print("----- 可输出 ------")
  16. print("取值方法1:",funx.__next__())
  17. print("取值方法2:",next(funx))

生成器发送数据:

  1. def funx1():
  2. while True: #如果不写则启动就结束了,不能继续发数据
  3. res=yield
  4. print("获取的结果:",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. print(next(va)) #输出:b

队列:

可自定义先入先出还是后人先出,数据一经取出就在队列里自动去除

  1. import queue
  2.  
  3. #先进先出
  4. #qlistx=queue.Queue(maxsize=5) #生成实例,参数maxsize表示最大数量,超过则阻塞,等待头取出
  5. #qlistx=queue.Queue() #生成实例
  6.  
  7. #后进先出
  8. qlistx=queue.LifoQueue() #生成实例
  9.  
  10. #设置数据方法一
  11. #队列满则阻塞等待
  12. qlistx.put("")
  13. qlistx.put("")
  14.  
  15. #设置数据方法二
  16. #超时则报异常
  17. qlistx.put("",timeout=1)
  18.  
  19. print(qlistx.qsize()) #输出列表大小
  20.  
  21. #取数据方法一
  22. #如果取到最后没有数据,将会一直处于阻塞
  23. print(qlistx.get())
  24. print(qlistx.get())
  25.  
  26. #取值方法二
  27. #设置超时时间,超时则报异常
  28. print(qlistx.get(timeout=1))
  29.  
  30. #取数据方法三
  31. #无数据不进行阻塞,如果无数据则报异常
  32. #print(qlistx.get_nowait())

优先级存取值:

值越小则优先级越高,实现高优先级最先取出

  1. import queue
  2.  
  3. qlistx=queue.PriorityQueue() #生成实例
  4.  
  5. qlistx.put((1,""))
  6. qlistx.put((-1,""))
  7. qlistx.put((100,""))
  8.  
  9. print(qlistx.get()) #输出:(-1, '2222222')
  10. print(qlistx.get()) #输出:(1, '1111111')

Python档案袋(生成器、迭代器、队列 )的更多相关文章

  1. python初识生成器 迭代器

    生成器 带有 yield 的函数在 Python 中被称之为 generator(生成器) def xragns(): #定义函数生成器 print('小伙') yield ('好') #加上yiel ...

  2. python 容器 生成器 迭代器 总结

    一.容器 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元素存储在内存中. >> ...

  3. Python中生成器,迭代器,以及一些常用的内置函数.

    知识点总结 生成器 生成器的本质就是迭代器. 迭代器:Python中提供的已经写好的工具或者通过数据转化得来的. 生成器:需要我们自己用Python代码构建的 创建生成器的三种方法: 通过生成器函数 ...

  4. python基础 生成器 迭代器

    列表生成式: a=[1,2,3] print a b=[i*2 for i in range(10)] #i循环10次,每一个i的值乘2就是列表中的值.列表生成式 print b >>[1 ...

  5. 第四天python3 python解析式-生成器-迭代器

    标准库datetime datetime模块  对日期.时间.时间戳的处理 datetime类 类方法: today() 返回本地时区当前时间的datetime对象: now(tz=None) 返回当 ...

  6. python高级之生成器&迭代器

    python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container):多个元素组织在一起的数据结构 可迭代对象( ...

  7. 第三篇:python高级之生成器&迭代器

    python高级之生成器&迭代器   python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container ...

  8. Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle

    目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...

  9. 第五章:Python基础の生成器、迭代器、序列化和虚拟环境的应用

    本课主题 生成器介紹和操作实战 迭代器介紹和操作实战 序例化和反序例化 Json 和 Pickle 操作实战 字符串格式化的应用 创建虚拟环境实战 本周作业 生成器介紹和操作实战 什么是生成器,生成器 ...

  10. Python基础之迭代器和生成器

    阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...

随机推荐

  1. Phaser文档访问不了,下载英文版文档到本地,已经共享在国内网站上面

    点击链接查看, http://www.simuhunluo.top/Phaser/ 可以找到你所需要的类.

  2. Kafka安装之 Zookeeper

    一 . Zookeeper 概述        ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它 ...

  3. NGINX按天生成日志文件的简易配置

    NGINX按天生成日志文件的简易配置 0x01 最近后端童鞋遇到一个小需求,拆分nginx生成的log文件,最好是按天生成,看着她还有很多bug待改的状态,我说这个简单啊,我来吧.曾经搞node后端的 ...

  4. 我的Python之旅第二天

    一 .字符串操作 1单引号('').双引号("").三引号(""" """)的区别. 如果字符串中不包含单引号.双引号, ...

  5. linux内核中断之看门狗

    一:内核中断 linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误:在Device Drivers /Watchdog ...

  6. 基于gtid的复制

    Ⅰ.GTID的介绍 global transaction id identifier 全局事务id gtid = server_uuid + transaction_id server_uuid是全局 ...

  7. InnoDB存储引擎结构介绍

    Ⅰ.InnoDB发展史 时间 事件 备注 1995 由Heikki Tuuri创建Innobase Oy公司,开发InnoDB存储引擎 Innobase开始做的是数据库,希望卖掉该公司 1996 My ...

  8. Asp.net MVC + Redis(hash入库+log4net集成)

    博客四元素 既然要写一个博客类的网站,那就应该知道博客的相关信息. 标题 作者 时间 内容 title author time content 因为之前有了解过Redis,所以有点纠结于数据的存储方式 ...

  9. 解决_CRT_SECURE_NO_WARNINGS警告

    VS中: 工程属性->属性->配置属性->C/C++->命令行 在命令行中添加一行: /D _CRT_SECURE_NO_WARNINGS OK!

  10. 让站点支持MarkDown语法~(转)

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式.Markdown的语法简洁明了.学习容易,而且功能比纯文本更强,因此有很多人 ...