一、复习
储备知识1
def index(x,y):
print(x,y)
def wrapper(*args,**kwargs):
index(*args,**kwargs)
二、装饰器
"""
1 什么是装饰器
装饰器就是装饰别人的工具,具体是指为被装饰者添加新功能
装饰器-》函数
被装饰者-》函数
2 为何要用装饰器
装饰器的核心思想:(开放封闭原则)
在不修改被装饰者源代码以及调用方式的前提下,为被装饰者添加新功能
3 如何实现装饰器
可以用闭包函数去实现装饰器
"""
被装饰者
import time
def index():
print('welcome to index page')
time.sleep(3)
index()
方案一:问题-》修改了被装饰者的源代码
import time
def index():
start = time.time()
print('welcome to index page')
time.sleep(3)
stop = time.time()
print(stop - start)
index()
方案二:问题-》会造成代码冗余
import time
def index():
print('welcome to index page')
time.sleep(3)
start = time.time()
index()
stop = time.time()
print(stop -start)
start = time.time()
index()
stop = time.time()
print(stop -start)
start = time.time()
index()
stop = time.time()
print(stop -start)
方案三:问题-》修改了被装饰对象的调用方式
import time
def index():
print('welcome to index page')
time.sleep(3)
def wrapper(func):
start = time.time()
func()
stop = time.time()
print(stop -start)
wrapper(index)
方案四:我们用wrapper函数赋值给原函数名index,wrapper应该与原函数保持一致,但是现在的问题是不一致
import time
def index():
print('welcome to index page')
time.sleep(3)
def outter(func):