day12 三大神器
一,迭代器(iter)
含义:
容器形数据类型
创建迭代器方法:
- 将其他数据转换成迭代器
- 生成迭代器
特点:
- 打印的时候不能查看元素
- 无法获取元素个数------len( )函数不能在迭代器市使用
- 获取元素时必须从迭代器中取出,取出后元素从迭代器中消失,且无法再添加
迭代器的操作:
注意:迭代器无增删改操作
查:
- 获取单个元素
next(迭代器)--------获取迭代器最前面那个元素
示例:
A=iter("abc")
print(A)
#返回值是a
- 遍历
for 变量 in 迭代器
二,生成器
含义:
容器型数据类型,但是生成器中存储的并不是数据,而是产生数据的算法,
本质:
从获取数据的角度来看还是迭代器
创建生成器:
调用一个带有yield关键字的函数就可以得到一个生成器
注意:
如果被调用的函数中有yield,那么调用函数的时候不是不会执行函数体,也不会获取函数返回值,而是产生一个生成器
控制生成器元素的个数和值:
执行创建生成器函数体时,会遇到几次yield,对应的生成器创建几个数据,每次遇到yield,其后面的值就是创建的数据
生成器创建数据的原理:
每次获取生成器数据的时候就执行函数体,当遇到yield 就停下来
三,装饰器
含义:
给已经定义好的函数添加功能的工具
装饰器=实参高阶函数+返回值高阶函数+糖语法
本质:
是一个函数,既是实参高阶函数,又是返回值高阶函数
无参装饰器:
def 函数名(所需装饰的函数):
def 添加完功能的新函数(*args,**kwargs):
调用原函数
添加新功能
rturn 添加完功能的新函数
def 装饰器名(old_f):
def new_f(*args,**kwargs):
result=old_f(*args,**kwargs)
新增功能
return result
return new_f
示例:
写一个装饰器,在函数调用之前打印"皮皮鲁喜欢你"
def add_tag(old_f):
def new_f(*args,**kwargs):
print("皮皮鲁喜欢你")
result=old_f(*args,**kwargs)
return result
return new_f
@add_tag
def hello():
print("hello,world")
写一个装饰器在函数调用结束后打印”------end-------
def add_tag(old_f):
def new_f(*args,**kwargs):
print("---end---")
result=old_f(*args,**kwargs)
return result
return new_f
@add_tag
def hello():
print("hello,world")
写一个装饰器将函数返回值乘以100
def add_tag(old_f):
def new_f(*args,**kwargs):
result=old_f(*args,**kwargs)
if type(result) in (int,float):
return result*100
return new_f