装饰器,生成器,迭代器
装饰器:
1.本质是函数
2.功能:用来装饰其他函数,为其他函数添加附加功能
3.原则:1.不能修改被装饰的函数的源代码
2.不能修改被装饰的函数的调用方式
实现装饰器知识储备:
1.函数即‘变量’
2.高阶函数
3.嵌套函数
高阶函数+嵌套函数 ==》装饰器
··················································
高阶函数
1.把一个函数名当作实参传给另外一个函数
2.返回值中包含函数名
``````````````````````````````````````````````````
嵌套函数
def foo():
def bar():
bar()
bar()在外部不能调用
def foo():
bar()
这个为函数调用
@timer 就相当于 foo = timer(foo)
调用*args,**args
@auth(可以传入参数)
生成器:
~~~~~~~~~~~~~~~~~~~~~~~
列表生成式
[i*2 for i in range(10)]
相当于
a = []
for i in range(10):
i = i*2
a.append(i)
g = (i*2 for i in range(10))
g就为生成器
列表实施存在的,
生成器只准备一个算法。只有当数据被调用时,才会生成数据
只记录当前位置
生成器调用g.__next__()等于next(g)
c.send(XXX)
唤醒并传给生成器一个XXX值,并调用
·························································
一段函数如果存在yield,这个函数就会变为生成器。
此时这段函数中的return的返回值就变为生成器异常的值
yield返回当前状态的值,并中断函数,保存当前执行状态。下一次执行,
从中断处开始执行
此时这个函数必须调用生成器的方法才可以执行。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
迭代器:
可以被for循环的对象,统称为可迭代对象,Iterale
用isinstance(x,Iterable)可以判断x是否是可迭代对象
可以被next()函数调用并不断返回下一个值的对象,成为迭代器:Iterator
生成器都是迭代器对象,列表等都不是
通过iter()函数,可以把其他的变成迭代器对象。
python的for循环本质上就是通过不断调用next()函数实现的。
浙公网安备 33010602011771号