迭代器
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的位置
面向过程的编程思想
核心是’过程’二字,过程即解决问题的步骤,即先干什么,再干什么。
基于面向过程写程序就好比在设计一条流水线,是一种机械式的思维方式。
优点:复杂的问题流程化进而简单化
缺点:修改一个阶段,其他阶段都有可能需要做出修改,牵一发而动全身,即扩展性极差
应用:由于扩展性要求低的场景