1.0装饰器
装饰器:本质是函数,(装饰其他函数),就是为其他函数添加附加功能
应用:当多个函数要增加一个功能时,由于函数过多,当函数正在运行时又无法修改原函数代码,所有装饰器就起到作用了
原则:1不能修改被装饰的函数的源代码
2不能修改被装饰的函数的调用方式
实现装饰器知识储备:
函数即变量
高阶函数
嵌套函数 高阶函数+嵌套函数=》装饰器
例子
#-- coding:utf-8 --
import time
#timeer就是装饰器,同时也是一个函数
def timeer(func):
def warrper():
start_time=time.time()
func()
stop_time=time.time()
print(“the func run time is %s” % (stop_time-start_time))
return warrper
@timeer #调用装饰器 只有下面调用被装饰函数时才调用,也就是下面调用test()
def test1():
time.sleep(3)
return (‘in the test1’)
test1() 正常执行,但是不返回任何东西,就是return不返回出来
上面是其实是简写,调用方便,下面就是它原本的意思,正常是使用上面的简写,比较方便
import time
def test1():
time.sleep(3)
print(‘this is test1’)
def dec(func):
def deo():
start_time=time.time()
func()
stop_time=time.time()
print(’%s run tiem is %s’ % (func,stop_time-start_time))
return deo()
test1=dec(test1) # @dec(test1) 就是相当于这一步
如果函数要加参数
import time
def dec(func):
def deo(*args): #给deo赋值,让它可以接受任意参数
start_time=time.time()
func(*args)
stop_time=time.time()
print(’%s run tiem is %s’ % (func,stop_time-start_time))
return deo #返回的是deo,其实deo就是重新赋值的test1 我们要给test1赋值就是给deo赋值,看上面
@dec
def test1(name,age):
time.sleep(3)
print(name,age)
print(‘this is test1’)
test1(‘wyq’,22)