Python高级函数之生成器和迭代器
目录
一:生成器
1.1 定义
使用传统的方法,创建包含100w个元素的列表,会占用极大的存储空间,而且利用效率不高。那么,一种良好的解决思路是,在循
环的过程中不断推算出后续的元素,那么就不必要创建完整的列表,从而节省大量的存储空间。
这种一边循环一边计算的机制,称为生成器:generator
1.2 创建
第一种:
列表生成式: a=[i+1 for i in range(10)] 创建一个列表
把上面的[] 变成()我们就创建了一个generator g=(i+1 for i in range(10))
第二种:
在普通函数中加入 yield,以斐波拉数列的函数生成为例解释
[code]def f(x): n,a,b=0,0,1 while n<x: yield b a,b=b,a+b n=n+1 return None date=f(10) print(next(date)) print('are you ok') print(next(date)) ### 1 are you ok 1
变成generator函数,在每次调用next()的时候执行,遇到yield返回,再次执行时从上次返回的yield语句返回
1.3 输出
generator中保存的是算法,每次调用next(g)变回计算出下一个元素,直到计算到没有,抛出StopIteration错误
实际中:我们使用for循环计算并打印每一个元素,因为generator也是一种可迭代对象
[code]g=(x+1 for x in rang(10)) for n in g: print(n)
1.4 捕捉生成器的return返回值
返回值包含在StopIteration的value中,使用错误处理来获得其返回值
[code]while True: try: x=next(date) print(x,end=' ') except StopIteration as e: print('\ngenerator return value',e.value) break
二:迭代器
2.1可迭代对象 Iterable
直接可以作用于for循环的数据类型有如下几种:
一:集合数据类型,如list,tuple,dict,set,str等
二:generator,包含生成器和带yield的generator function
以上两种数据类型我们统称为可迭代对象:Iterable
可以使用isinstance()判断一个对象是不是Iterable对象
[code]from collections import Iterable print(isinstance('sssss',Iterable)) print(isinstance([],Iterable)) print(isinstance({},Iterable)) print(isinstance((x for x in range(10))),Iterable) # 返回值都是True
2.2 定义
可以被next()函数调用并且不断返回下一个值的对象统称为迭代器:Iterator
生成器都是Iterator对象,但是list tuple dict set是可迭代对象,但不是迭代器
2.3 解释
Iterator表示的是一个数据流,可以被next()不断调用并不断返回下一个数据,知道没哟的时候抛出错误。
这个数据流是一个有序序列,但是我们不能提前知道有序序列的长度,只能不断通过next()计算出下一个数据
Iterator的计算是惰性的,只有需要下一个数据才会进行计算
毫不夸张的说,Iterator可以表示一个无线大的数据流,例如全体自然数,但是list却不能
2.4 转换
可以通过 iter()方法讲一个Iterable转换为Iterator
例如: 返回值是True
[code]list1=[1,2,3,4,56] Ite1=iter(list1) print(isinstance(Ite1,Iterator))
三:总结
[code]for x in [1,2,3,4,5] ......
for循环的本质:三部曲
第一:调用iter()方法返回一个迭代器
第二:不断调用next()方法
第三:处理StopIteration异常
凡是作用于for循环的对象都是Iterable类型
凡是可以作用next()都是Iterator对象,表示一个惰性的计算序列
- Python 生成器函数,生成器表达式,迭代器,列表解析
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
- Python3 迭代器与生成器,函数,数据结构
- 【Python】[高级特性]切片,迭代,列表生成式,生成器,迭代器
- python的高级特性:切片,迭代,列表生成式,生成器,迭代器
- Python高级特性:迭代器和生成器
- python核心高级学习总结8------动态性、__slots__、生成器、迭代器、装饰、闭包
- python函数:迭代器和生成器
- python中函数的高级特性以及生成器
- python基础----迭代器、生成器、协程函数及应用(面向过程实例)
- python特性(七):通过生成器函数构造序列对象的迭代器
- python函数作用域、迭代器与生成器知识点整理
- python高级编程-Part1 生成器和迭代器
- Python高级特性(切片,迭代,列表生成式,生成器,迭代器)
- EffectivePython-函数:闭包、生成器、迭代器协议
- Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器)
- 第三篇:python高级之生成器&迭代器
- python高级之生成器&迭代器
- python函数高级特性之生成器
- Python高级特性(切片 迭代 列表生成式 生成器 迭代器)学习笔记