python基础-第六篇-6.1生成器与迭代器
迭代器
特点:
访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
不能随机访问集合中的某个值 ,只能从头到尾依次访问
访问到一半时不能往回退
便于循环比较大的数据集合,节省内存
- 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生成器与迭代器的更多相关文章
- python基础-第六篇-6.2模块
python之强大,就是因为它其提供的模块全面,模块的知识点不仅多,而且零散---一个字!错综复杂 没办法,二八原则抓重点咯!只要抓住那些以后常用开发的方法就可以了,哪些是常用的?往下看--找答案~ ...
- python基础-第六篇-6.4模块混战
我们之前接触多的编程方式就是函数式编程,而且喜欢就一个文件里写完所有的程序代码,这样做在前期感觉还不错,不过一旦你的程序变复杂,在易读性和排错方面就感觉好吃力,功能界限不明显,那今天我们就来讲讲怎么用 ...
- NHibernate 组件基础 (第六篇)
NHibernate 组件基础 (第六篇) 一.组件简介 组件(Component)可以理解为被一个对象所包含的对象而持久化,而并非一个实体.简单说来,假如数据库有FirstName,LastName ...
- Python基础知识(六)------小数据池,集合,深浅拷贝
Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : 一个文 ...
- Python基础第三篇
一.collections系列 Counter是对字典类型的补充,用于追踪值的出现次数,具备字典的所有功能 + 自己的功能 1.计数器Counter import collections a='aba ...
- Python 基础学习 总结篇
Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...
- python基础知识六 文件的基本操作+菜中菜
基础知识六 文件操作 open():打开 file:文件的位置(路径) mode:操作文件模式 encoding:文件编码方式 f :文件句柄 f = open("1.t ...
- Python基础【第一篇】
一.Python简介 Python的创始人(Guido von Rossum 荷兰人),Guido希望有一种语言既能像C一样方便地调用操作系统的功能接口,也能像shell脚本一样,轻松地实现编程,A ...
- python基础知识14---迭代器、生成器、面向过程编程
阅读目录 一 迭代器 二 生成器 三 面向过程编程 一 迭代器 1 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初 ...
随机推荐
- 入门基础之——flash
不得不说韦老师的课程还是很需要时间去消化.今天改变了学习策略,遇到不会的知识点,先查资料. 以前在单片机编程中,都只是知道代码存在flash中,而一听韦老师的课程,就是nand flash启动或者no ...
- 实现cell显示一个删除button
假设想实现滑动cell时,cell右边就能显示一个删除button,则要实现tableview 下边方法: - (void)tableView:(UITableView *)tableView com ...
- ps aux|awk -F'[ ]+' '$3>90{print $2}'|xargs -n1 kill -9
ps aux|awk -F'[ ]+' '$3>90{print $2}'|xargs -n1 kill -9
- 关于如何自定义handler
1.在web.config 中的webserver 下添加 <handlers> <add verb="*" path="*.html" ty ...
- 使用javascript操作cookies的实例
<script> //写cookies函数 作者:翟振凯 function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值 { var Days ...
- jQuery 中get 和post 方法传值注意事项
用 jQuery 的都知道,jQuery 的 get 和 post 方法有三个参数:地址,数据 和回调函数,但我们知道地址也可以跟随数据的(形如:get_data.php?v1=1&v2=2) ...
- Autofac IoC容器基本使用步骤【1】
原文:http://www.bkjia.com/Asp_Netjc/888119.html [原文中有一个地方报错,下面已修改] 一.基本步骤: 1.设计适合控制反转(IoC)的应用程序 2.给应用 ...
- UNIQLO
UNIQLO品牌的迅销公司建立于1963年,当年是一家销售西服的小服装店.公司现任董事长兼总经理柳井正早年毕业于早稻田大学经济学专业,1972年8月进入迅销公司,1984年9月就任公司董事长兼总经理. ...
- FCN 分割网络详解
博客来源于:https://www.cnblogs.com/gujianhan/p/6030639.html: https://blog.csdn.net/sinat_24143931/article ...
- Docker 使用及常用命令
https://yeasy.gitbooks.io/docker_practice/content/image/dockerfile/expose.html docker practice 资料 -- ...