三元运算 变量 = 条件返回True的结果 if 条件 else 条件返回False ,用于简单
import time
time.time() 1970年至今多少秒
time.sleep()暂时休眠
装饰器形成过程

1def func(): 2 time.sleep(0.01) 3 print('fds') 4def timmer(f): #装饰器函数 5 def inner(): 6 start = time.time() 7 f() #被装饰的函数 8 end = time.time() 9 print(end - start) 10 return inner 11func = timmer(func) 12func()
View Code
timer就是一个装饰器函数,只对一个函数,有一些装饰作用
装饰器作用
不想修改函数的调用方式,但还想在原来的函数前后添加功能
原则
开发封闭原则
开放:对扩展是开放的
封闭:对修改是封闭的
封版
语法糖

1def timmer(f): #装饰器函数名 2 def inner(): 3 start = time.time() 4 f() #被装饰的函数 5 end = time.time() 6 print(end - start) 7 return inner 8@timmer #语法糖 9def func():#被装饰的函数 10 time.sleep(0.01) 11 print('fds') 12# func = timmer(func) 13func()
View Code

1def timmer(f): #装饰器函数名 2 def inner(): 3 start = time.time() 4 ret = f() #被装饰的函数 5 end = time.time() 6 print(end - start) 7 return ret 8 return inner 9@timmer #语法糖 10def func():#被装饰的函数 11 time.sleep(0.01) 12 print('fds') 13 return 'hhh' 14# func = timmer(func) 15ret = func() #inner 16print(ret) 17#fds 18# 0.01003718376159668 19# hhh
View Code
装饰带参数函数的装饰器

1def timmer(f): #装饰器函数名 2 def inner(a): 3 start = time.time() 4 ret = f(a) #被装饰的函数 5 end = time.time() 6 print(end - start) 7 return ret 8 return inner 9@timmer #语法糖 10def func(a):#被装饰的函数 11 time.sleep(0.01) 12 print('fds',a) 13 return 'hhh' 14# func = timmer(func) 15ret = func(1) #inner 16print(ret) 17# fds 1 18# 0.010416269302368164 19# hhh
View Code

1def timmer(f): #装饰器函数名 2 def inner(*args,**kwargs): 3 start = time.time() 4 ret = f(*args,**kwargs) #被装饰的函数 5 end = time.time() 6 print(end - start) 7 return ret 8 return inner 9@timmer #语法糖 10def func(a,b):#被装饰的函数 11 time.sleep(0.01) 12 print('fds',a,b) 13 return '111' 14 15@timmer #语法糖 16def func1(a):#被装饰的函数 17 time.sleep(0.01) 18 print('fds',a) 19 return '222' 20# func = timmer(func) 21ret = func(1,2) #inner 22ret1 = func1(1) 23# print(ret,ret1) 24# fds 1 2 25# 0.010915040969848633 26# fds 1 27# 0.01041555404663086 28# 111 222
View Code
装饰器的固定模式

1def wrapper(func): 2 def inner(*args,**kwargs): 3 ret = func(*args,**kwargs) #被装饰函数 4 return ret 5 return inner() 6@wrapper #qq = wrapper(qq) 7def qq(): 8 print(123) 9 10ret = qq() #相当于在执行inner()
View Code

1def wrapper(func): 2 def inner(*args,**kwargs): 3 print('在被装饰器之前做的事:') 4 ret = func(*args,**kwargs) 5 print('在被装饰的函数执行之后做的事:') 6 return ret 7 return inner 8 9@wrapper 10def h(day): 11 print("gg") 12 return 'tyw' 13 14ret = h(3) 15print(ret) 16# 在被装饰器之前做的事: 17# gg 18# 在被装饰的函数执行之后做的事: 19# tyw
View Code

1def outer(*args,**kwargs): 2 print(args) 3 print(*args) 4 def inner(*args): 5 print('inner',args) 6 inner(*args) 7outer(1,2,3) # ==outer(#[1,2,3,4]) 8# (1, 2, 3) 9# 1 2 3 10# inner (1, 2, 3)
View Code

1def wa(): 2 ''' 3 一个哈哈哈的函数 4 :return: 5 ''' 6 print('哈哈哈') 7 8print(wa.__name__) #查看字符串的函数名 9print(wa.__doc__) #查看函数注释 10# wa 11# 12# 一个哈哈哈的函数 13# :return
View Code

1def wrapper(func): #func = h 2 def inner(*args,**kwargs): 3 print('在被装饰器之前做的事:') 4 ret = func(*args,**kwargs) 5 print('在被装饰的函数执行之后做的事:') 6 return ret 7 return inner 8 9@wrapper 10def h(day): 11 print("gg") 12 return 'tyw' 13print(h.__name__)#inner
View Code
wraps

1from functools import wraps 2def wrapper(func): #func = h 3 @wraps(func) 4 def inner(*args,**kwargs): 5 print('在被装饰器之前做的事:') 6 ret = func(*args,**kwargs) 7 print('在被装饰的函数执行之后做的事:') 8 return ret 9 return inner 10 11@wrapper 12def h(day): 13 print("gg") 14 return 'tyw' 15print(h.__name__)#h
View Code
带参数的装饰器

1import time 2flag = True 3def timmer_out(flag): 4 def timmer(func): 5 def inner(*args,**kwargs): 6 if flag: 7 start = time.time() 8 ret = func(*args,**kwargs) 9 end = time.time() 10 print(end - start) 11 return ret 12 else: 13 ret = func(*args,**kwargs) 14 return inner 15 return timmer 16@timmer_out(flag) # == timmer = timmer_out(flag) 17 # @timmer 18def ww(): 19 time.sleep(0.1) 20 print('hhh') 21@timmer_out(flag) 22def egt(): 23 time.sleep(0.1) 24 print('dddgs') 25flag = False 26ww() 27egt() 28# hhh 29# 0.10020256042480469 30# dddgs 31# 0.10077428817749023
View Code
多个装饰器装饰一个函数

1def wapper1(func): 2 def inner1(): 3 print('wrap1,bf func') 4 func() 5 print('qrp1,af func') 6 return inner1 7def wapper2(func): 8 def inner2(): 9 print('wrap2,bf func') 10 func() 11 print('qrp2,af func') 12 return inner2 13@wapper2 14@wapper1 15def f(): 16 print('in f') 17f() 18# wrap2,bf func 19# wrap1,bf func 20# in f 21# qrp1,af func 22# qrp2,af func
View Code