迭代器

特点:

  1. 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容

  2. 不能随机访问集合中的某个值 ,只能从头到尾依次访问

  3. 访问到一半时不能往回退

  4. 便于循环比较大的数据集合,节省内存

  1. names = iter(['alex','wupeiqi','eva'])
  2. print(names)
  3. print(names.__next__())
  4. print(names.__next__())
  5. print(names.__next__())
  6. #在往下取就报错
  7. # print(names.__next__())

生成器

  一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器

  1. #ATM
  2. def cash_money(amount):
  3. while amount > 0:
  4. amount -= 100
  5. yield 100
  6. print('又来取钱啦!')
  7.  
  8. #这里没有真正执行函数,只是把函数变成一个迭代器
  9. atm = cash_money(500)
  10. # print(atm)
  11. print(atm.__next__())
  12. print(atm.__next__())
  13. print('叫个大保健')
  14. print(atm.__next__())

yield单线程异步并发

  1. #消费者生产者模型
  2.  
  3. import time
  4. def consumer(name1):
  5. print('{name}准备吃包子啦!'.format(name = name1))
  6. while True:
  7. baozi = yield
  8. print('第{baozi_num}个包子来了,被{name}吃了!'.format(baozi_num=baozi,name=name1))
  9.  
  10. def producer(name2):
  11. c = consumer('a')
  12. c2 = consumer('b')
  13. c.__next__()
  14. c2.__next__()
  15. print('{name}开始准备做包子啦!'.format(name=name2))
  16. for i in range(1,6):
  17. time.sleep(1)
  18. print('做了两个包子!')
  19. c.send(i)
  20. c2.send(i)
  21.  
  22. producer('alex')

生成器表达式

  列表解析和生成器表达式非常的相似,不过有一点明显的区别:列表解析是用中括号括起来,而生成器表达式则是小括号

  1. #列表解析
  2. li = [i+100 for i in range(10)]
  3. print(li)
  4.  
  5. #加条件
  6. li2 = [i+100 for i in range(10) if i % 2 == 0]
  7. print(li2)

  由于列表解析非常占内存,所以不适用大数据的场景

  1. #生成器表达式
  2. li = (i+100 for i in range(10))
  3. print(li)
  4. #<generator object <genexpr> at 0x0000000000A2AE08>
  5.  
  6. #加条件
  7. li2 = (i+100 for i in range(10) if i % 2 == 0)
  8. for x in li2:
  9. print(x)

欢迎大家对我的博客内容提出质疑和提问!谢谢

                                                                             笔者:拍省先生  

 

python基础-第六篇-6.1生成器与迭代器的更多相关文章

  1. python基础-第六篇-6.2模块

    python之强大,就是因为它其提供的模块全面,模块的知识点不仅多,而且零散---一个字!错综复杂 没办法,二八原则抓重点咯!只要抓住那些以后常用开发的方法就可以了,哪些是常用的?往下看--找答案~ ...

  2. python基础-第六篇-6.4模块混战

    我们之前接触多的编程方式就是函数式编程,而且喜欢就一个文件里写完所有的程序代码,这样做在前期感觉还不错,不过一旦你的程序变复杂,在易读性和排错方面就感觉好吃力,功能界限不明显,那今天我们就来讲讲怎么用 ...

  3. NHibernate 组件基础 (第六篇)

    NHibernate 组件基础 (第六篇) 一.组件简介 组件(Component)可以理解为被一个对象所包含的对象而持久化,而并非一个实体.简单说来,假如数据库有FirstName,LastName ...

  4. Python基础知识(六)------小数据池,集合,深浅拷贝

    Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: ​ 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : ​ 一个文 ...

  5. Python基础第三篇

    一.collections系列 Counter是对字典类型的补充,用于追踪值的出现次数,具备字典的所有功能 + 自己的功能 1.计数器Counter import collections a='aba ...

  6. Python 基础学习 总结篇

    Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...

  7. python基础知识六 文件的基本操作+菜中菜

    基础知识六 文件操作 ​ open():打开 ​ file:文件的位置(路径) ​ mode:操作文件模式 ​ encoding:文件编码方式 ​ f :文件句柄 f = open("1.t ...

  8. Python基础【第一篇】

     一.Python简介 Python的创始人(Guido von Rossum 荷兰人),Guido希望有一种语言既能像C一样方便地调用操作系统的功能接口,也能像shell脚本一样,轻松地实现编程,A ...

  9. python基础知识14---迭代器、生成器、面向过程编程

    阅读目录 一 迭代器 二 生成器 三 面向过程编程 一 迭代器 1 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初 ...

随机推荐

  1. 入门基础之——flash

    不得不说韦老师的课程还是很需要时间去消化.今天改变了学习策略,遇到不会的知识点,先查资料. 以前在单片机编程中,都只是知道代码存在flash中,而一听韦老师的课程,就是nand flash启动或者no ...

  2. 实现cell显示一个删除button

    假设想实现滑动cell时,cell右边就能显示一个删除button,则要实现tableview 下边方法: - (void)tableView:(UITableView *)tableView com ...

  3. ps aux|awk -F'[ ]+' '$3>90{print $2}'|xargs -n1 kill -9

    ps aux|awk -F'[ ]+' '$3>90{print $2}'|xargs -n1 kill -9

  4. 关于如何自定义handler

    1.在web.config 中的webserver 下添加 <handlers> <add verb="*" path="*.html" ty ...

  5. 使用javascript操作cookies的实例

    <script> //写cookies函数 作者:翟振凯 function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值 { var Days ...

  6. jQuery 中get 和post 方法传值注意事项

    用 jQuery 的都知道,jQuery 的 get 和 post 方法有三个参数:地址,数据 和回调函数,但我们知道地址也可以跟随数据的(形如:get_data.php?v1=1&v2=2) ...

  7. Autofac IoC容器基本使用步骤【1】

    原文:http://www.bkjia.com/Asp_Netjc/888119.html  [原文中有一个地方报错,下面已修改] 一.基本步骤: 1.设计适合控制反转(IoC)的应用程序 2.给应用 ...

  8. UNIQLO

    UNIQLO品牌的迅销公司建立于1963年,当年是一家销售西服的小服装店.公司现任董事长兼总经理柳井正早年毕业于早稻田大学经济学专业,1972年8月进入迅销公司,1984年9月就任公司董事长兼总经理. ...

  9. FCN 分割网络详解

    博客来源于:https://www.cnblogs.com/gujianhan/p/6030639.html: https://blog.csdn.net/sinat_24143931/article ...

  10. Docker 使用及常用命令

    https://yeasy.gitbooks.io/docker_practice/content/image/dockerfile/expose.html docker practice 资料 -- ...