三.函數進階(裝飾器)二
阿新 • • 發佈:2019-05-11
time() family start fun pri 啦啦啦啦 做的 ner microsoft
一. 裝飾器
裝飾器
裝飾器的作用
裝飾器的固定模式
裝飾器意思在已有的功能上 添加新功能但是不能修改原有的功能
# 簡單的函數裝飾器 def fun1(): print("哈哈哈哈哈哈name") def fun2(): print("啦啦啦啦啦啦啦") fun1() fun2() # 啦啦啦啦啦啦啦 # 哈哈哈哈哈哈name
import time def aa(): start=time.time() print("啦啦啦啦啦啦啦啦啦啦啦啦啦") time.sleep(2) end=time.time() cc=end-start return cc,"執行時間" d=aa() print(d) # 啦啦啦啦啦啦啦啦啦啦啦啦啦 # # (2.038980722427368, ‘執
# 簡單裝飾器 import time def gg(ll): start=time.time() ll() end = time.time() lo=end-start print(lo) def ff(): time.sleep(3) print("啦啦啦啦啦啦啦啦啦啦啦啦啦") gg(ff)# 啦啦啦啦啦啦啦啦啦啦啦啦啦 # 3.0006630420684814
# 裝飾器意思在已有的功能上 添加新功能但是不能修改原有的功能 import time def fun(): time.sleep(4) print("哈哈哈哈哈哈哈啊哈") def b(f): # 裝飾器函數 def c(): start=time.time() f() # 被裝飾的函數 end=time.time() print(end-start) return c a=b(fun) a() # 哈哈哈哈哈哈哈啊哈 # # # 4.000654458999634
1 [email protected]語法糖 裝飾器 return
import time # 裝飾器意思在已有的功能上 添加新功能但是不能修改原有的功能 def b(f): # 裝飾器函數 def c(): start=time.time() f() # 被裝飾的函數 end=time.time() print(end-start) return c @b #語法 糖@裝飾器函數名 # b=b(fun) 等於@b # b() def fun(): # 被裝飾的函數 time.sleep(4) print("哈哈哈哈哈哈哈啊111哈") fun() # 哈哈哈哈哈哈哈啊111哈 # 4.005651235580444
# 被裝飾的函數帶有返回值的 裝飾函數 import time def b(f): # 裝飾器函數 def c(): start=time.time() ret=f() # 被裝飾的函數 end=time.time() print(end-start) return ret return c @b # # b=b(fun) 等於@b 語法 糖@裝飾器函數名 def fun(): # 被裝飾的函數 time.sleep(4) print("哈哈哈哈哈哈哈啊11111111111111111哈") return "我來學習python" aa=fun() print(aa) # 哈哈哈哈哈哈哈啊11111111111111111哈 # 4.014800548553467 # 我來學習python
# 被裝飾的函數帶參數的裝飾器 import time def b(f): # 裝飾器函數 def c(a): start=time.time() ret=f(a) # 被裝飾的函數 end=time.time() print(end-start) return ret return c @b # # b=b(fun) 等於@b 語法 糖@裝飾器函數名 def fun(a): # 被裝飾的函數 time.sleep(4) print("哈哈哈哈哈哈哈",a) return "我來學習python" aa=fun(99999999) print(aa) # 哈哈哈哈哈哈哈 99999999 # 4.005716800689697 # 我來學習python
2 [email protected]語法糖 裝飾器 return 參數*arg ,**kwargs
import time # 被裝飾的函數帶參數的裝飾器 def b(f): # 裝飾器函數 def c(*args,**kwargs): start=time.time() ret=f(*args,**kwargs) # 被裝飾的函數 end=time.time() print(end-start) return ret return c @b # # b=b(fun) 等於@b 語法 糖@裝飾器函數名 def fun(a): # 被裝飾的函數 time.sleep(4) print("哈哈哈哈哈哈哈",a) return "我來學習php11111" bb=fun(99999999) print(bb) @b # # b=b(fun) 等於@b 語法 糖@裝飾器函數名 def fun1(c,d): # 被裝飾的函數 time.sleep(3) print("啦啦啦啦啦啊啦裏",c,d) return "我來學習python2222" aa=fun1(10000,2000000) print(aa) # # 我來學習php11111 # 啦啦啦啦啦啊啦裏 10000 2000000 # 3.008254289627075 # 我來學習python2222
import time # 被裝飾的函數帶參數的裝飾器 def b(f): # 裝飾器函數 def c(*args,**kwargs): start=time.time() f(*args,**kwargs) # 被裝飾的函數 end=time.time() print(end-start) return c @b # # b=b(fun) 等於@b 語法 糖@裝飾器函數名 def fun(a): # 被裝飾的函數 time.sleep(4) print("哈哈哈哈哈哈哈",a) fun(99999999) @b # # b=b(fun) 等於@b 語法 糖@裝飾器函數名 def fun1(c,d): # 被裝飾的函數 time.sleep(3) print("啦啦啦啦啦啊啦裏",c,d) fun1(10000,2000000)
3. 裝飾器固定模板
# 裝飾模板 def wrapper(f): # f參數代表被裝飾的函數 def inner(*args,**kwargs): # 在裝飾函數之前要做的事情 ret= f(*args,**kwargs) # 在裝飾函數之後要做的事情 return ret return inner @wrapper def aa(a): print("11111111",a) return "我要吃冰淇淋" dd=aa(2) print(dd)
def outer(f): def inner(*args,**kwargs): ret= f(*args,**kwargs) return ret return inner @outer def aa(*args): print("aaaa",args) return "我是被裝飾的函數" b=aa(1,666666,999,5555) print(b)
三.函數進階(裝飾器)二