目录
一、迭代器
1.迭代器的概念理解
''' 迭代器从字面上理解就是迭代的工具。而迭代是每次的开始都是基于上一次的结果,不是周而复始的,而是不断发展的。 ''' l=[1,2,3,4] count=0 while count<len(l): print(l[count]) count+=1
2.可迭代对象与迭代器对象
''' (1)可迭代对象: 可迭代对象就是内置__iter__方法的对象(再次重申,python中一切皆对象)。 (2)迭代器对象就是内置有__iter__方法和__next__方法的对象。 可迭代对象执行了obj.__iter__()得到的结果就是迭代器对象,迭代器对象执行了obj.__iter__()得到的是迭代器本身。 要明确的一点是迭代器对象一定是可迭代对象,但是可迭代对象不一定是迭代器对象。 '''

#字符串 string='hello world' iter_st=string.__iter__() while True: try: print(iter_st.__next__()) except StopIteration: break #列表 s=[1,3,4,5,'a'] iter_s=s.__iter__() while True: try: print(iter_s.__next__()) except StopIteration: break #字典 dic={'a':1,'b':2} iter_dic=dic.__iter__() while True: try: print(iter_dic.__next__()) except StopIteration: break #集合 l={1,2,3,4,5} iter_l=l.__iter__() while True: try: print(iter_l.__next__()) except StopIteration: break
3.迭代器的优缺点:
''' 优点: 1.提供了一种不依靠索引取值的迭代方式 2.执行一次.__next__()方法往内存读一条数据,节省内存 缺点: 1.无法用len(),甚至在数据读完之前都不会知道数据有多少 2.只能往后走,不能回退 3.一次性的 '''
补充for循环
with open('db.txt','r',encoding='utf-8') as f: for line in f: print(line) #执行in后的iter_f=f.__iter__()方法得到迭代器对象 #执行iter_f.__next__(),将得到的值赋值给line,执行循环体代码 #重复第二步,直到程序抛出StopIteration异常,结束循环
二、生成器
''' 生成器就是迭代器。 当函数体内有yield时,那么函数名()的结果就是生成器,yield不会执行函数体代码而是保存函数的运行状态。 ''' def chicken(): print('>>>1') yield 1 print('>>>2') yield 2 obj=chicken()#拿到生成器对象 print(obj)#<generator object chicken at 0x000001B3FD8580A0> res=obj.__next__()#执行第一行,返回>>>1 print(res)#1 res2=obj.__next__() print(res2) res3=obj.__next__()#StopIteration

def eat(name): print('%s ready to eat'%name) while True: food=yield print('%s start to eat %s'%(name,food)) name=input('投喂对象>>>').strip() obj=eat(name) obj.__next__() food=input('食物>>>').strip() obj.send(food)

def is_range(start,stop,step=1): n=start while n<stop: yield n n+=step for i in is_range(10): print(i) #小改动 def my_range(start=0,stop=1,step=1): n=start while n<stop: yield n n+=step for i in my_range(2,10,2): print(i)
三、面向过程编程
''' 不同的编程范式像不同的武林门派。 面向过程的编程思想: 核心就是‘过程’二字,即解决问题的过程 面向过程编程就好比设计一条流水线,是种机械式的思维方式。 优点:复杂问题流程化、简单化 缺点:扩展性差,连锁反应 应用:用于扩展性要求低的场景 '''