迭代器

特点:

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

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

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

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

names = iter(['alex','wupeiqi','eva'])
print(names)
print(names.__next__())
print(names.__next__())
print(names.__next__())
#在往下取就报错
# print(names.__next__())

生成器

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

#ATM
def cash_money(amount):
while amount > 0:
amount -= 100
yield 100
print('又来取钱啦!') #这里没有真正执行函数,只是把函数变成一个迭代器
atm = cash_money(500)
# print(atm)
print(atm.__next__())
print(atm.__next__())
print('叫个大保健')
print(atm.__next__())

yield单线程异步并发

#消费者生产者模型

import time
def consumer(name1):
print('{name}准备吃包子啦!'.format(name = name1))
while True:
baozi = yield
print('第{baozi_num}个包子来了,被{name}吃了!'.format(baozi_num=baozi,name=name1)) def producer(name2):
c = consumer('a')
c2 = consumer('b')
c.__next__()
c2.__next__()
print('{name}开始准备做包子啦!'.format(name=name2))
for i in range(1,6):
time.sleep(1)
print('做了两个包子!')
c.send(i)
c2.send(i) producer('alex')

生成器表达式

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

#列表解析
li = [i+100 for i in range(10)]
print(li) #加条件
li2 = [i+100 for i in range(10) if i % 2 == 0]
print(li2)

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

#生成器表达式
li = (i+100 for i in range(10))
print(li)
#<generator object <genexpr> at 0x0000000000A2AE08> #加条件
li2 = (i+100 for i in range(10) if i % 2 == 0)
for x in li2:
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. python 快速获取文件类型

  2. TIM—基本定时器

    本章参考资料:< STM32F4xx 参考手册>.< STM32F4xx 规格书>.库帮助文档< stm32f4xx_dsp_stdperiph_lib_um.chm&g ...

  3. CSS学习笔记(10)--nth-child和nth-of-type

    CSS3 :nth-child() 选择器 规定属于其父元素的第二个子元素的每个 p 的背景色: p:nth-child(2) CSS3 :nth-of-type() 选择器 规定属于其父元素的第二个 ...

  4. Hive入门笔记---2.hive函数大全

    Hive函数大全–完整版 现在虽然有很多SQL ON Hadoop的解决方案,像Spark SQL.Impala.Presto等等,但就目前来看,在基于Hadoop的大数据分析平台.数据仓库中,Hiv ...

  5. 扩展RBAC用户角色权限设计方案<转>

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

  6. C++ 类中的静态成员变量,静态成员函数

    //类中的静态成员变量,静态成员函数 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; /* ...

  7. Hadoop源码分析之Configuration

    转自:http://www.it165.net/admin/html/201312/2178.html org.apache.hadoop.conf.Configuration类是Hadoop所有功能 ...

  8. Myeclipse怎么导入project项目

    1,打开Meclipse,在左面的区域点击右键,选择import键. 2,在import面板中选择Exiting Projects into Workbence,点击Next, 3,选择Browse. ...

  9. php如何优化压缩的图片

    php程序开发中经常涉及到生成缩略图,利用php生成缩略图这个过程本身没难度,但是你知道php能够优化调节生成的缩略图的质量吗?也就是说php能够控制生成缩略图的清晰度以及生成后的缩略图的体积.下面我 ...

  10. hrbustoj 1104:Leyni, LOLI and Line(解析几何,斜截式的应用)

    Leyni, LOLI and Line Time Limit: 1000 MS    Memory Limit: 65536 K Total Submit: 181(54 users)   Tota ...