一、迭代器
迭代器:可以理解为一个容器,循环的时候,每次从容器中取出一个元素,直到元素被取完为止。
# 1)for循环,本质上是迭代器的应用。 for i in range(1,10): print(i,end="") >>123456789
#定义一个类方法:在类中,实现两个方法__iter__与__next__ #其中__iter__方法需要返回对象本身,它是for循环使用迭代器的要求; #__next__方法用于返回容器中下一个元素,当容器中的数据取完时,需要引发StopIteration. #2):自定义迭代器,通过传入最小值最大值,返回该范围所有数值的3次方;将返回的值,存入num_list列表中。 class Numm(): def __init__(self,minn,maxx): self.minn=minn self.maxx=maxx def __iter__(self): return self #返回对象本身 def __next__(self): #返回这个范围内所有的3次方 num=self.minn if self.minn<=self.maxx: self.minn+=1 return num**3 else: raise StopIteration num_list=[] for i in Numm(1,5): print(i) >>1 >>8 >>27 >>64 >>125
二、生成器
生成器:如果一个列表中,存在海量的数据,如果仅仅只是想访问其中的某几个元素,那么这样的操作会特别耗内存;若一个函数中如果包含yield关键字,那么这个函数就不再是一个普通函数,而是一个生成器(generator)对象。生成器的特点:
1.操作海量数据,节约内存空间。
2.生成器是一个返回迭代器的函数,只能用于迭代操作。
3.在调节生成器运行的过程中,每次遇到yield函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时,从当前位置继续运行。
# 1)创建一个生成器,传入最大最小值,执行next()方法。 def gene(minn,maxx): while minn<maxx: yield minn minn+=1 my_gene=gene(1,5) print(next(my_gene)) print(next(my_gene)) print(next(my_gene)) >>1 >>2 >>3
# 2)【yield 与 return】的区别 # return后,会跳出当前函数。yield 不会跳出当前函数。 # yield保存当前函数的执行状态,在返回后,函数又回到之前保存的状态继续执行。 def test(): return 1 return 2 c1=test() print(c1) def gene(): yield 1 yield 2 genetest=gene() c2=next(genetest) c3=next(genetest) print(c2,c3) >>1 >>1 2
三、装饰器
装饰器:装饰器是一种增加函数或类功能的简单方法,它可以快速的给不同的函数或类传入相同的功能。调用被装饰的函数,与之前的调用过程没有任何区别。
# 示例语法: # def decorate(func): #定义装饰器函数,参数为func,代表被装饰的函数 # def wrapper(*agrs,**kwargs): #新定义一个包装函数,用于返回 # func(*agrs,**kwargs) #调用被装饰的函数,引用外部函数 # return wrapper #返回包装函数 def decorate(func): def wrapper(*agrs,**kwargs): print("执行开始") func(*agrs,**kwargs) print("执行结束") return wrapper @decorate def func(): print("hello word") print(func()) >>执行开始 >>hello word >>执行结束 >>None