可迭代对象、迭代器与生成器
2018-09-28 21:01
351 查看
迭代器
什么是迭代器
迭代指的是一个重复的过程,且不是单纯的重复,每次重复都基于上次的结果。
迭代器指的是迭代取值的工具,该工具的特点是可以不依赖于索引取值。
为什么用迭代器
为了找出一种通用的&可以不依赖于索引的迭代取值方式。
如何用迭代器
可迭代的对象:但凡内置有__iter__方法得当对象都称之为可迭代的对象
迭代器对象:既内置有__iter__,又内置__next__方法
关于__iter__方法:
- 调用可迭代对象的__iter__会得到一个迭代器对象
- 调用迭代器对象的__iter__会得到迭代器本身
迭代器的优缺点
有点
- 提供了一种通用的&可以不依赖于索引的迭代取值方式
- 同一时刻在内存中只有一个值,更加节省内存
缺点 - 取指定值时不如索引灵活,并且迭代器是一次性的,只能往前取值
- 无法预知迭代器数据的个数
可迭代的对象
str、list、tuple、dict、set、文件对象
迭代器对象
文件对象是python定义好的迭代器对象
可迭代对象如何转化为迭代器对象
调用可迭代对象内置的__iter__方法会得到一个返回值,该返回值就是对应的迭代器对象
for循环
for循环准确的说应该是迭代器循环,原理如下:
- 先调用in后面可迭代对象的__iter__方法,得到迭代器对象
- 执行迭代器的__next__方法得到一个返回值,赋值给每次循环的变量,运行循环体代码
循环往复,直到迭代器取值完毕抛出异常然后捕捉异常结束循环
自定义迭代器
定义一个迭代器必须要有yield关键字
在函数内但凡包含有yield关键字,运行到yield时,会暂停运行并会得到一个返回值,该返回值成为生成器对象,生成器本质就是迭代器
yield- 提供一种自定义迭代器的解决方案
- yield可用于返回值
yield和return的异同
相同点:都可以用于返回值
不同点:yield可以暂停函数,yield可以返回多个值,而return只能返回一次值且会终止函数的运行。
一个自定义的生成器
def my_range(start,stop,step=1): while start<stop: yield start start+=step res=my_range(1,5,2) print(next(res)) print(next(res))
相关文章推荐
- Python 中 生成器、迭代器、可迭代对象 的概念
- 可迭代对象,迭代器(生成器)区别
- 迭代器、可迭代对象and初识生成器
- 一张图明白python 生成器/迭代器/可迭代对象 之间的关系
- Python迭代对象、迭代器、生成器
- 完全理解Python迭代对象、迭代器、生成器
- 流畅的python第十四章可迭代的对象,迭代器和生成器学习记录
- 【python】 可迭代对象、迭代器、生成器
- Python迭代对象、迭代器、生成器
- 完全理解 Python 迭代对象、迭代器、生成器
- 可迭代对象,迭代器,生成器
- 【python】14、完全理解可迭代对象、迭代器、生成器
- 完全理解Python迭代对象、迭代器、生成器
- python之迭代器、生成器、可迭代对象
- 完全理解Python迭代对象、迭代器、生成器
- 列表解析式、生成器、迭代器及可迭代对象的区别和应用
- 理解Python迭代对象、迭代器、生成器
- 迭代器、可迭代对象、生成器
- 完全理解PYTHON迭代对象、迭代器、生成器
- python迭代,可迭代对象,生成器,迭代器--