一,迭代器简述
是一个迭代取值的工具,使用迭代器,让每次重复过程。并且每次结果都是基于上次结果上的。
迭代器
优点:迭代器不依赖索引取值,不占用过多的内存空间
缺点:取值麻烦,必须依次一个一个取值,不能倒着取,取完为止,如果没有监测异常,否则取完值就会报错
二,可迭代对象与迭代器对象
1,可迭代对象:是在数据类型中调用内置功能时,内置方法中有'__iter__'的,都为可迭代对象。
可迭代对象不一定是迭代器对象
#常用的数据类型中有以下几种为可迭代对象: #都可调用__iter__ str #字符串 list #列表 tupl #元组 dict #字典 set #集合 file #文件 本身就是迭代器对象
2,迭代器对象:可迭代对象执行__iter__方法取到的值就是迭代器对象。
有内置方法__iter__和__next__。
迭代器对象一定是可迭代对象
d = {'x':1,'y':2} #这个为可迭代对象 iter_d = d.__iter__ # iter_d 这个就是迭代器对象 print(iter_d.__next__) #迭代取值
三,生成器对象
生成器对象本质上就是自定义的一个迭代器对象。
在函数体内有yield,再调用函数时,不会执行体内的代码,拿到的返回值就是一个生成器对象。
在函数体内由yield来返回一个或多个值,但函数体运行只是暂停,在该语句后,并不结束函数体.(普通函数是由return来返回一个或多个值的,且函数运行结束)
def chicken(): print('>>>>:第一次') yield 1 print('>>>>:sencond') yield 2 obj = chicken() res = obj.__next__ print(res)
四,生成器表达式:
当数据类型比较大的时候,就采用生成器表达式来做一个生成器。方便取值
l = (i for i in range(19999)) print(next(l))
五,面向过程编程思想:
面向过程编程思想:基于面向过程编程就相当于在设计一条流水线生产零件一样,方式比较机械化。
优点:复杂的问题流程化,进而简单化。
缺点:可扩展性较差。
用于扩展性要求低的场景。
六,涉及到的题目
def multipliers(): return [lambda x: i*x for i in range(4)] print([m(2) for m in multipliers()]) # [6,6,6,6]