迭代器、可迭代对象与生成器
Iterator 与 gerater的作用是优化内存,当处理大文件,大数据的时候可以使用。
1. 对大列表进行优化
2. 大文件的优化
一、基本概念
迭代器: 一种数据类型,用来处理大数据
可迭代对象:一个对象,能每次返回数据组中的一个成员,for循环中每次返回一个数据或者用来作为iter内置函数的参数,返回迭代器对象
生成器: 生成器是通过yield 或 生成器表达式,用一种比较方便的方式生成了迭代器。
二、代码视线部分
2.1 yield
yield函数就是一个生成器:
yield的作用:
1. 相当于return返回一个值
2. 记住该位置,下次进来从这个位置开始。
两种使用方式:
1. 使用next 和 send 需结合异常处理(当超出最大值的时候,会报错)
2. 使用for循环,for内部自动帮我们处理异常
def ge():yield 8yield 88yield 888g = ge() print(next(g)) print(next(g)) print(next(g)) print(next(g)) # 报错,超出
使用for处理
def gen_num2():for i in range(8): # range是一个惰性机制。yield ifor i in gen_num2():print(i)
2.2 迭代器,可迭代对象,生成器的类型判断
from collections import Iterator, Iterable, Generator# 列表的类型判断 li = [1, 2, 3, 4] print(isinstance(li, Iterable)) # True print(isinstance(li, Iterator)) # False print(isinstance(li, Generator)) # False# 字典的类型判读 dic = {'name':'hui', 'age':18} print(isinstance(dic, Iterable)) # True print(isinstance(dic, Iterator)) # False print(isinstance(dic, Generator)) # False# range的类型判断 # range是一个可迭代对象,不是迭代器。但是他跟迭代器有类似的地方,又一个惰性机制,所有也很节约内存 r = range(10) print(type(r)) print(isinstance(r, Iterable)) # True print(isinstance(r, Iterator)) # False print(isinstance(r, Generator)) # False# 文件对象 是一个迭代器 with open('1.txt', 'wb') as f:pass print(isinstance(f, Iterable)) # True print(isinstance(f, Iterator)) # True print(isinstance(f, Generator)) # False# yield对象 def ge():for i in range(9):yield(i) g = ge() print(isinstance(g, Iterable)) # True print(isinstance(g, Iterator)) # True print(isinstance(g, Generator)) # False
2.3 可迭代对象转换为迭代器,优化内存
使用iter内置函数
from collections import Generator, Iterable, Iteratorx = [x for x in range(10)] y = iter(x) # 列表转换为迭代器 print(next(y)) print(next(y)) print(next(y)) print(next(y)) print(isinstance(y, Iterable)) print(isinstance(y, Iterator)) # 是迭代器对象, print(isinstance(y, Generator))dic = {'name':'hui', 'age':18} print(isinstance(dic, Iterable)) print(isinstance(dic, Iterator)) print(isinstance(dic, Generator))d = iter(dic) # 字典转换为迭代器 print(type(d)) print(isinstance(d, Iterable)) print(isinstance(d, Iterator)) print(isinstance(d, Generator))
2.4 生成器表达式
# 列表表达式 y = [x for x in range(10)]# 生成器表达式 z = (x for x in range(10)) print(type(z), z)
2.5 大文件 与 函数优化
1. 函数优化
# 斐波那契 # 0,1,1,2,3 def fb(n):a, b = 0, 1while a < n:print(a)a,b = b, a+bdef fb_list(n):a, b = 0, 1fblist = []while a < n:fblist.append(a) # 当数据量非常大的时候,就会造成内存爆炸a, b = b, a+breturn fblistprint(fb_list(1000))def fb_ge(n):a, b = 0, 1fblist = []while a < n:yield a # 使用生成器每次来取,优化内存a, b = b, a+bfor i in fb_ge(1000):print(i, end=' ')
2. 大文件优化
打开文件的对象,本身就是一个迭代器。
with open('1.txt', 'wb') as f:pass print(isinstance(f, Iterable)) # True print(isinstance(f, Iterator)) # True print(isinstance(f, Generator)) # False
转载于:https://www.cnblogs.com/louhui/p/9381668.html
迭代器、可迭代对象与生成器相关推荐
- uniapp对象怎么获取值_第65p,关于:生成器、迭代器与迭代对象(上)
大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第65篇文章,第三阶段的课程:Python进阶知识:生成器.迭代器与迭代对象. 一.什么是可迭代对象? 迭代是一个重复的过程,迭代每 ...
- python手写一个迭代器_搞清楚 Python 的迭代器、可迭代对象、生成器
很多伙伴对 Python 的迭代器.可迭代对象.生成器这几个概念有点搞不清楚,我来说说我的理解,希望对需要的朋友有所帮助. 1 迭代器协议 迭代器协议是核心,搞懂了这个,上面的几个概念也就很好理解了. ...
- python 生成器对象_Python 生成器, 迭代器, 可迭代对象的区别
1.可迭代对象 在python中, 一切皆对象, 但凡是可以用for循环进行遍历取值的对象都可以称之为可迭代对象, 可迭代对象在程序的一个执行周期中,可以无限轮次的进行循环遍历 2.迭代器 a.一个可 ...
- 玩转Python中迭代器与迭代对象的使用与演示
0.什么是迭代器(iterator)与迭代对象? 比如:python中的集合数据类型,如 list . tuple . dict . set . str 等,我们可以使用for遍历其中的每个元素,此外 ...
- python3可迭代对象、迭代器、生成器、协程yield入门
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-01-24 16:13:07 # @Author : cdl (1217096 ...
- 怎么确定迭代器后面还有至少两个值_如何理解Python中的可迭代对象、迭代器和生成器
▍前言 在讨论可迭代对象.迭代器和生成器之前,先说明一下迭代器模式(iterator pattern),维基百科这么解释: 迭代器是一种最简单也最常见的设计模式.它可以让用户透过特定的接口巡访容器中的 ...
- 【Python】【容器 | 迭代对象 | 迭代器 | 生成器 | 生成器表达式 | 协程 | 期物 | 任务】...
Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyn ...
- python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...
python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...
- Python基础9——可迭代对象
17可迭代对象 list 是一个迭代对象 可以通过 for - in - 这类语句遍历读取数的对象称之为可迭代对象 li = [1,2,3]for i in li:print(i) 17.1 什么是可 ...
最新文章
- 卸载后的mysql和navicat怎么清除干净_小而巧的卸载工具
- 【点分治】Tree(luogu 4178/金牌导航 点分治-1)
- PyTorch框架学习十九——模型加载与保存
- PyQt4(简单界面)
- [USACO08OPEN]寻宝之路Clear And Present Danger
- python机器学习库sklearn——模型评估
- 测试管理中的一个问题—功能点覆盖还是功能测试点覆盖
- 区块链 Hyperledger fabric 排序服务Kafka
- 拦截器inceptor
- bp神经网络数据预测实例,bp神经网络预测数据
- 如何使用xshell4连接自己搭建的服务器
- 杭州电子科技大学计算机技术考研总结
- 使用 yarn 安装 marked
- 半导体器件物理【1】量子理论扫盲——从Planck到态叠加原理
- 没固定公网 IP 的公司内网实现动态域名解析( 阿里云万网解析 )
- python信息检索系统_GitHub - Uyouii/SearchingSystem: python实现的基于倒排索引和向量空间模型实现的信息检索系统...
- java 大小写匹配_大写字母的Java正则表达式
- node重新加入error execution phase kubelet-start: error uploading crisocket: Unauthorized
- 01-学习笔记(webstorm自定义模板代码)【新手上路,多多关照】
- 06 CSS-盒子模型【尚硅谷JavaWeb教程】
热门文章
- I/O多路转接之 select
- (转) Unity3D 使用Texturepacker打包工具制作NGUI(Atlas)图集
- django 学习笔记(一)
- FlexPaper二次开发问题及搜索高亮显示
- TreeMap之floorKey
- 名人尿炕被人发现后怎么办?
- 使用php连接mysql数据库_PHP使用mysql与mysqli连接Mysql数据库用法示例
- Turbo C 3.0安装及使用说明
- 【正一专栏】疯狂溢价的转会市场,中国足球最奇葩
- 怎么判断有几个滴定突跃点_高中化学怎么学?先看近5年高考化学高频考点知识点分值分析...