迭代器

1.什么是迭代:迭代器是一个重复的过程,并且每次重复都是基于上一次的结果而来

l={'x':1,'y':2}

n=o

while n<len(l):

       print(l[n])

       n+=1

 

2.迭代器:迭代取值工具

可迭代的对象:在python中,但凡内置有__iter__方法的对象都是可迭代的对象

str='hello'#字符串
list=[1,2,3]#列表
tuple=(1,2,3)#元组
dic={'x':1}#字典
s1={'a','b','c'}#集合
f=open('a.txt','w',encoding='utf-8')#文件

总结:

可迭代的对象:str,list,tupl,dict,set,file

1.获取可迭代对象的方式:无须获取,python内置str,list,tupl,dict,set,file  。都是可迭代的对象

2.特点:内置有__iter__方法都叫可迭代的对象,执行该方法会拿到一个迭代器对象

 

迭代器对象:文件对象本身就是迭代器对象

特点:内置有__next__方法,执行该方法就会拿到迭代器对象中的一个值

           内置有__iter__方法,执行该方法会拿到迭代器本身

 

迭代器的优点:

1.提供了一种可不依赖于索引的取值方式

2.迭代器更加节省内存

 

迭代器缺点:

1.取值麻烦,只能一个一个取,只能往后取,

2.并且是一次性的,无法用len获取长度

 

for循环原理分析

1.for循环称之为迭代器循环,in后跟的必须是可迭代的对象

2.for循环会执行in后对象的__iner__方法,拿到迭代器对象

3.然后调用迭代器对象的__next__方法,拿到一个返回值赋值给line,执行一次循环体

4.周而复始,直到取值完毕,for循环会检测到异常自动结束循环

l=open('a.txt','r',encoding='utf-8')

for line in l:

      print(line)

 

 

1、生成器

函数内包含有yield关键字,

再调用函数,就不会执行函数体代码,拿到的返回值就是一个生成器对象

def chicken():

      print('=====>first')

      yield 1

      print('=====>sencond')

      yield 2

      print('=====>third')

      yield 3

obj=chicken()

生成器本质就是迭代器,也就是说生成器的用法其实就是迭代器的用法。

res=obj.__next__()

print(rse)

 

1.iter_obj=obj.__iter__(),  #拿到迭代器

2.出发iter_obj.__next__(),   #拿到该方法的返回值,赋值给item

3.周而复始,直到函数内不在有yield,即取值完毕

4.for会检测到StopIteration异常,结束循环

for item in obj:

     print(item)

 

总结yield:

1.为我们提供了一种自定义迭代器的方式,可以在函数内用yield关键字,调用函数拿到的结果就是一个生成器,生成器就是迭代器。

2.yield可以像return一样用于返回值,区别是return只能返回一次值,而yield可以返回多次,因为yield可以保存函数执行的状态

def my_range():

       print('start.......')

       n=0

       while True

               yield n

                n+=1

 

for i in my_range():

print(i)

 

注意:

必须初始化一次,让函数停在yield的位置

 

 

面向过程的编程思想

核心是’过程’二字,过程即解决问题的步骤,即先干什么,再干什么。

基于面向过程写程序就好比在设计一条流水线,是一种机械式的思维方式。

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

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

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

 

posted on 2018-03-31 12:42  muzinianhua  阅读(73)  评论(0编辑  收藏  举报