BitTigerio 2018-03-31
迭代器:
1、什么是迭代器,就是一个重复的过程,每次重复都是根据上一次的结果而来的。
while True:<br /> print('>>>>>')<br /><br />l = {'x':1,'y':2}<br />n = 0<br />while n<len(l):<br /> print(l[n])<br /> n+=1
2、要想了解迭代器到底是什么?必须先了解一个概念,即什么是可迭代的对象?
可迭代的对象:在python中,但凡内置有__iter__方法的对象,都是可迭代的对象!
num = 1 #不可迭代对象<br />以下都是可迭代的对象:<br /> str1 = 'hello'<br /> list1 = [1,2,3]<br /> tuple1 = (1,2,3)<br /> dic1 = {'x':1,'y':2}<br /> set1 = {'x','y','z'}<br /> file1 = open('a.txt','r',encoding='utf-8')<br /> str1.__iter__()
3、迭代器:迭代取值的工具,可迭代的对象
执行__iter__方法得到的返回值就是迭代器对象。
dic = {'x':1,'y':2} iter_dic = dic.__iter__() print(iter_dic.__next__()
4、可迭代对象vs迭代器对象
可迭代的对象:str、list、tuple、dict、set、file
1、获取可迭代对象的方式:无需获取,
python内置str,list,tuple,dict,set,file都是可迭代对象。
2、特点:
内置有__iter__方法的都是可迭代对象,执行该方法会拿到一个迭代器对象。
迭代器对象:文件对象本身就是迭代器对象;
1、获取迭代器对象的方法:
执行可迭代器对象的__iter__方法,拿到的返回值就是迭代器对象
2、特点:
内置有__next__方法,执行该方法会拿到迭代器对象中的一个值
内置有__iter__方法,执行该方法会拿到迭代器本身
x = 'hello'<br />iter_x = x.__iter__()<br />iter_x.__next__()<br /><br />文件本身就是迭代器对象<br />str1 = 'hello'<br />list1 = [1,2,3]<br />tup1 = (1,2,3)<br />dic1 = {'x':1,'y':2}<br />set1 = {1,2,3,4,5,6,7}<br />f = open('a.txt','r',encoding='utf-8')<br />f.__next__()
5、迭代器的优缺点分析
1、迭代器的优点:
提供了一种可不依赖于索引的取值方式
l = open('a.txt','r',encoding='utf-8')<br />iter_l = l.__iter__()<br />while True:<br /> try:<br /> print(iter_l.__next__())<br /> except StopIteration:<br /> break<br />l = [1,2,3,4,5,6,7,8,9,10]<br />iter_l = l.__iter__()<br />print(iter_l.__next__())<br />f= open('a.txt')
迭代器更加节省内存
2、迭代器的缺点
取值麻烦,只能一个一个取,只能往后取
并且是一次性的,无法用len获取长度
6、for循环原理分析:
for循环称之为迭代器循环,in后跟的必须是可迭代的对象。
for循环会执行in后的对象的__iter__方法,拿到迭代器的对象;
然后调用迭代器对象的__next__方法,拿到一个返回值赋值给line,执行一次循环
周而复始,直到取值完毕,for循环会检测到异常自动结束循环
生成器:
函数内包含有yield关键字
再调用函数,就不会执行函数体代码
生成器本质就是迭代器!
面向过程编程:
1、核心是'过程'二字,过程即解决问题的步骤,先干什么,然后干什么
基于面向过程编程就好比工厂流水线,是一种机械式思维方式;
优点:复杂的问题流程化,进而简化
缺点:修改一个阶段,其他阶段都有可能需要做出修改,牵一发而动全身,即扩展性极差
应用:用于扩展性要求低的场景;