python—day12 迭代器、生成器、面向过程编程

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、核心是'过程'二字,过程即解决问题的步骤,先干什么,然后干什么

基于面向过程编程就好比工厂流水线,是一种机械式思维方式;

优点:复杂的问题流程化,进而简化

缺点:修改一个阶段,其他阶段都有可能需要做出修改,牵一发而动全身,即扩展性极差

应用:用于扩展性要求低的场景;

相关推荐