Python进阶教程,生成器、迭代器一文掌握
迭代的概念上一次输出的结果为下一次输入的初始值 , 重复的过程称为迭代,每次重复即一次迭代 , 并且每次迭代的结果是下一次迭代的初始值
什么是迭代
- 访问集合元素的一种方式
- 可通过 for 循环遍历的对象 叫可迭代对象
- 数字类型 不可迭代
- 私信小编01即可获取大量Python学习资料
from collections.abc import Iterable#print(isinstance(要判断的对象 , 数据类型))print(isinstance([1,2,3,4],Iterable))是可迭代对象返回 True不是可迭代对象返回 False
可迭代的对象内置iter方法的 , 都是可迭代的对象 。list是可迭代对象 , dict是可迭代对象 , set也是可迭代对象 。
迭代器 Iterator1.为什么要有迭代器?对于没有索引的数据类型 , 必须提供一种不依赖索引的迭代方式 。
2.迭代器定义:迭代器:可迭代对象执行iter方法 , 得到的结果就是迭代器 , 迭代器对象有next方法
它是一个带状态的对象 , 他能在你调用next()方法的时候返回容器中的下一个值 , 任何实现了iter和next()方法的对象都是迭代器 , iter返回迭代器自身 , next返回容器中的下一个值 ,如果容器中没有更多元素了 , 则抛出StopIteration异常
迭代器的遍历循环:
class MyIterator(object):def __init__(self,list):self.list=listself.xiabiao=0def __iter__(self):#获取迭代器 , 自身就为迭代器 , 所以返回自身return selfdef __next__(self):#获取迭代器中的下一个数据if self.xiabiao < len(slef.list):item=self.list[self.xiabiao]self.xiabiao += 1return itemelse:raise StopIteration#抛出 停止迭代异常a=[11,22,33,44,55]my=MyIterator(a) for i in my:print(i)
for…in… 循环的本质:先通过iter( )获取可迭代对象的迭代器 , 然后对获取到的迭代器 不断使用next( )方法来获取下一个值 , 并赋值给一个变量 , 当遇到 StopIteration 循环结束while True:try:print(next( ))except StopIteration:break
迭代器的应用场景: 斐波那契数列class Fei(object):def __init__(self,n):self.n=nself.weizhi=0记录位置self.num1=0定义初始变量self.num2=1def __iter__(self):获取迭代器 , 此类本身就是迭代器 , 返回自身return selfdef __next__(self):获取迭代器中的下一个数据if self.weizhi < self.n:num=self.num1self.num1,self.num2=self.num2,self.num1+self.num2self.weizhi += 1return numelse:raise StopIterationfei=Fei(10) for i in fei:print(i)
查看迭代器数据的三种方法: for 、list、tuple#forfor i in fei:print(fei)#listprint(list(fei))#tupleprint(tuple(fei))
生成器 generator1.定义- 生成器(generator)是一个特殊的迭代器 , 它的实现更简单优雅 , yield是生成器实现next()方法的关键 。 它作为生成器执行的暂停恢复点 , 可以对yield表达式进行赋值 , 也可以将yield表达式的值返回 。
- 也就是说 , yield是一个语法糖 , 内部实现支持了迭代器协议 , 同时yield内部是一个状态机 , 维护着挂起和继续的状态 。
- 生成器可以理解为一种数据类型 , 这种数据类型自动实现了迭代器协议(其他数据类型需要调用自己的内置iter方法)
- 在Python中 , 一边循环 , 一边计算的机制 , 称为生成器 。
- 相当于为函数封装好iter和next
- return只能返回一次值 , 函数就终止了 , 而yield能返回多次值 , 每次返回都会将函数暂停 , 下一次next会从上一次暂停的位置继续执行
- 想自学Python来开发爬虫,需要按照哪几个阶段制定学习计划
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 音乐玩家的进阶之选 惠威D1500有源HiFi音箱评测
- 2021年Java和Python的应用趋势会有什么变化?
- 非计算机专业的本科生,想利用寒假学习Python,该怎么入手
- 用Python制作图片验证码,这三行代码完事儿
- 历时 1 个月,做了 10 个 Python 可视化动图,用心且精美...
- 同质化时代玩法进阶 2020年手机行业技术回顾
- 为何在人工智能研发领域Python应用比较多
- iOS 14系统可以支持自主更换图标了,教程赶紧收藏了