日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 装饰函数

發布時間:2024/4/15 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 装饰函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
裝飾器的作用 —— 不想修改函數的調用方式 但是還想在原來的函數前后添加功能 原則: 開放封閉原則
開放 : 對擴展是開放的
封閉 : 對修改是封閉的
# timmer就是一個裝飾器函數,只是對一個函數 有一些裝飾作用 1 import time 2 def timmer(f): #裝飾器函數 3 def inner(): 4 start = time.time() 5 f() #被裝飾的函數 6 end = time.time() 7 print(end - start) 8 return inner 9 10 @timmer #語法糖 @裝飾器函數名 11 def func(): #被裝飾的函數 12 time.sleep(0.01) 13 print('老板好同事好大家好') 14 return '新年好' 15 #inner 16 #func = timmer(func) 17 ret = func() #inner() 18 print(ret) 裝飾帶參數函數的裝飾器 def timmer(f): #裝飾器函數def inner(*args,**kwargs):#(1,2) /(1)start = time.time()ret = f(*args,**kwargs) #f(1,2) #被裝飾的函數end = time.time()print(end - start)return retreturn inner@timmer #語法糖 @裝飾器函數名 def func(a,b): #被裝飾的函數time.sleep(0.01)print('老板好同事好大家好',a,b)return '新年好' 裝飾器的固定模式
def wrapper(f): #裝飾器函數,f是被裝飾的函數def inner(*args,**kwargs):'''在被裝飾函數之前要做的事'''ret = f(*args,**kwargs) #被裝飾的函數'''在被裝飾函數之后要做的事'''return retreturn inner@wrapper #語法糖 @裝飾器函數名 def func(a,b): #被裝飾的函數time.sleep(0.01)print('老板好同事好大家好',a,b)return '新年好'   裝飾器進階?
帶參數的裝飾器
#500個函數統一
import time FLAG=False def time_out(FLAGE):def timmer(f): #裝飾器函數def inner(*args,**kwargs):#(1,2) /(1)if FLAGE:start = time.time()ret = f(*args,**kwargs) #f(1,2) #被裝飾的函數end = time.time()print(end - start)return retelse:ret = f(*args, **kwargs) # f(1,2)return retreturn innerreturn timmer@time_out(FLAG) #語法糖 @裝飾器函數名 def func(a,b): #被裝飾的函數time.sleep(0.01)print('老板好同事好大家好',a,b)return '新年好'func(2,3)

 多個裝飾器裝飾一個函數

 

#多個裝飾器裝飾一個函數 def wrapper1(func):def inner1():print('wrapper1 ,before func')ret = func()print('wrapper1 ,after func')return retreturn inner1 def wrapper2(func):def inner2():print('wrapper2 ,before func')ret = func()print('wrapper2 ,after func')return retreturn inner2 def wrapper3(func):def inner3():print('wrapper3 ,before func')ret = func()print('wrapper3 ,after func')return retreturn inner3@wrapper3 @wrapper2 @wrapper1 def f():print('in f')return '哈哈哈'print(f()) ### wrapper3 ,before func wrapper2 ,before func wrapper1 ,before func in f wrapper1 ,after func wrapper2 ,after func wrapper3 ,after func 哈哈哈

  wraps的用法

from functools import wraps def wrapper(func): #func = holiday@wraps(func)def inner(*args,**kwargs):print('在被裝飾的函數執行之前做的事')ret = func(*args,**kwargs)print('在被裝飾的函數執行之后做的事')return retreturn inner@wrapper #holiday = wrapper(holiday) def holiday(day):'''這是一個放假通知'''print('全體放假%s天'%day)return '好開心'print(holiday.__name__) print(holiday.__doc__) ret = holiday(3) #inner print(ret)

  

? ?


轉載于:https://www.cnblogs.com/olivia2018/p/8137505.html

總結

以上是生活随笔為你收集整理的python 装饰函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。