装饰器
-
什么是装饰器
装饰器的本质就是一个实参高阶函数或返回值高阶函数
装饰器的作用就是在不修改原函数的前提下给函数添加功能
-
装饰器
语法:
def 函数(func):
def test(*args,**kwargs):
func(*args,**kwargs)
添加新功能
return test
说明:
函数 - 装饰器对应的函数名,也是装饰器的名字(与添加功能相关)
func - 指向的是需要添加新功能的函数
test - 指向的是已经添加完功能的新函数
-
有参的装饰器
如果在实现装饰器新增功能时需要额外数据,那么就可以使用有参的装饰器
def 装饰器名称(装饰器的参数列表):
def test1(func):
def test2(*args.**kwargs):
func(*args,**kwargs)
添加新功能
return test2
return test1
迭代器
-
什么是迭代器
-
迭代器特点
迭代器是一种特殊的容器,1.不能直接查看所有元素(print看不到任何元素,不能计算长度)
2.若要读取元素的值必须将元素从迭代器中取出,且取出后再也放不回去,迭代器中不再有该元素
-
怎么创建迭代器
1.将其他序列转换成迭代器
iter(序列)
2.创建生成器(生成器本质是迭代器)
-
-
获取迭代器元素
注意:不管以什么形式取出迭代器中的元素,这个元素在迭代器中都不存在了
-
获取单个元素
next(迭代器) - 获取迭代器中最前面的一个元素
-
遍历
for 变量 in 迭代器:
-
生成器
-
生成器
生成器的本质就是一个迭代器
生成器是能够产生多个数据的容器,而不是真正同时保存多个数据的容器
-
创建生成器
调用带有yield关键字的函数就能得到一个生成器
调用普通函数:执行函数体;获取返回值
调用带有yield关键字的函数:不执行函数体;获取的是生成器对象
-
生成器怎么生成数据
-
一个生成器能产生多少数据
看执行生成器对应的函数在函数结束时能遇见几次yield就产生多少个数据
-
生成器生成的数据是哪些
看每次遇见yield时yield后面的数据是什么,产生的数据就是什么
-
-
生成器生成数据的原理
调用函数创建生成器对象时不会执行函数体,当获取生成器中元素的时候才会执行函数体
获取第一个元素时从函数开始执行,执行遇到第一个yield就会停下,并且将yield后面的数据作为这次获取到的元素
下次获取元素时会从上一次结束的位置接着往后执行函数体,直到遇见下一个yield,并将新的yield后的数据作为此次获取到的元素,以此类推
如果从上次结束的位置到函数结束都没有遇到yield,则这个生成器就不会再创建数据,如果是next操作就会报错