函数的装饰器
------------------------------函数的装饰器和推导式-----------------------------
1.装饰器
def bar():
print(1)
def base():
print(2)
bar = base
bar()
#输出的结果为2
def func(arg):
def inner():
return arg()
return inner
def index():
print('123')
return '666'
v1 = index() #123
v2 = func(index)
index =666 #在此之前已经将index函数赋值给arg所以不影响函数的结果
v3=v2()
#输出的结果为
#123
#123
-
装饰器:在不改变原函数内部代码基础上,在函数执行之前和执行之后自动执行某个功能
def func(arg): def inner(): print('before') v = arg() print('after') return v return inner #第一步:执行func函数并将下面的函数参数传递,相当于:func(index) #第二步:将func的返回值重新赋值给下面的函数名。index = func(index) @func def index(): print('123') return '666' print(index)
-
装饰器的基本结构
#装饰器的编写 def x(func): def y(): ret = func() return ret return y #装饰器的应用 @x def index(): pass @x def manage(): pass #执行函数 v = index() print(v)
-
装饰器应用案例
import time def wrapper (func): def inner(): start_time = time.time() #函数之前的一个操作 v = func() end_time = time.time() #函数之后的一个操作 print(end_time - start_time) return v return inner @wrapper def func1(): time.sleep(2) print(1223) func1()
-
装饰器应用场景:想要为函数扩展功能时,可以选择装饰器
-
记住
- 装饰器的编写格式
def 外层函数(参数): def 内层函数(*args,**kwargs): return 参数(*arfs,**kwargs) return 内层函数
-
装饰器的应用格式
@外层函数 def index(): pass insex()
3.模块
import time
v = time.time() #获取当前时间,返回值
time.sleep(2) #代码睡两秒,无返回值
记录学习的点点滴滴