import time
def timmer(func):
#函数名可以当做函数的参数
def inner():
start = time.time()
func()
end = time.time()
print(end - start)
return inner
def hahaha():
time.sleep(0.1)
print('aaaa')
#hahaha()
# timmer(hahaha)
#我们不能修改这个函数的调用方式
#也不能修改原代码
# hahaha = timmer(hahaha) #timmer函数的地址给了hahaha
# hahaha() #实际上执行的是timmer
import time
def timmer(func):
#函数名可以当做函数的参数
def inner():
start = time.time()
func()
end = time.time()
print(end - start)
return inner
def hahaha():
time.sleep(0.1)
print('aaaa')
# hahaha = timmer(hahaha) #timmer函数的地址给了hahaha
# hahaha()
# def timmer(func): #---> hahaha
# def inner(x,y):
# func(x,y) # --->hahaha
# return inner
#
# def hahaha(a,b):
# time.sleep(0.1)
# print(a,b)
#
# hahaha = timmer(hahaha)
# #我们不能修改这个函数的调用方式
# hahaha(1,2) #==>inner(1,2)
def timmer(func): #---> hahaha
def inner(x,y):
func(x,y) # --->hahaha
return inner
def hahaha(a,b):
time.sleep(0.1)
print(a,b)
def kkk(a):
print(a)
# hahaha = timmer(hahaha)
# hahaha(1,2) #inner(1,2)
def timmer(func): #---> hahaha
def inner(*args,**kwargs):
#args == (1,2) kwargs == {}
#*args == 1,2 **kwargs == a =1,b = 2
func(*args,**kwargs) # --->hahaha
return inner
def kkk(a):
print(a)
kkk = timmer(kkk)
# kkk(1)
def timmer(func): #---> jjj
def inner(*args,**kwargs):
ret = func(*args,**kwargs) # --->ret = jjj()
return ret
return inner
@timmer #jjj = timmer(jjj) 语法糖
def jjj():
return 123
# jjj = timmer(jjj)
ret = jjj() #==>inner
#装饰器的本质 :闭包函数
#功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能
def timmer(func):
def inner(*args,**kwargs):
'''添加函数调用之前的扩展代码'''
ret = func(*args,**kwargs)
'''添加函数调用之后的扩展代码'''
return ret
return inner
#设计模式 原则 开放封闭原则
#对扩展是开放的
#对修改是封闭的
def wrapper(func):#装饰
def inner(*args,**kwargs):
ret = func(*args,**kwargs)
return ret
return inner
@wrapper
def aaa():
print('asghksdlhf')
@wrapper
def bbb():
print('asghksdlhf')
# aaa()
# bbb()
# aaa()
# bbb()
import time
def wrapper(func): # 装饰
def inner(*args, **kwargs):
start = time.time()
ret = func(*args, **kwargs)
end = time.time()
print(end - start)
return ret
return inner
@wrapper
def lll():
time.sleep(0.1)
print('hello')
lll()