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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python学习之路--装饰器

發(fā)布時(shí)間:2024/4/17 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python学习之路--装饰器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

三元運(yùn)算 變量 = 條件返回True的結(jié)果 if 條件 else 條件返回False ,用于簡單

import time

time.time() 1970年至今多少秒

time.sleep()暫時(shí)休眠

裝飾器形成過程

def func():time.sleep(0.01)print('fds') def timmer(f): #裝飾器函數(shù)def inner():start = time.time()f() #被裝飾的函數(shù)end = time.time()print(end - start)return inner func = timmer(func) func() View Code

timer就是一個(gè)裝飾器函數(shù),只對一個(gè)函數(shù),有一些裝飾作用

裝飾器作用

?不想修改函數(shù)的調(diào)用方式,但還想在原來的函數(shù)前后添加功能

原則

開發(fā)封閉原則

? 開放:對擴(kuò)展是開放的

? 封閉:對修改是封閉的

封版

語法糖

def timmer(f): #裝飾器函數(shù)名def inner():start = time.time()f() #被裝飾的函數(shù)end = time.time()print(end - start)return inner @timmer #語法糖 def func():#被裝飾的函數(shù)time.sleep(0.01)print('fds') # func = timmer(func) func() View Code

?

def timmer(f): #裝飾器函數(shù)名def inner():start = time.time()ret = f() #被裝飾的函數(shù)end = time.time()print(end - start)return retreturn inner @timmer #語法糖 def func():#被裝飾的函數(shù)time.sleep(0.01)print('fds')return 'hhh' # func = timmer(func) ret = func() #inner print(ret) #fds # 0.01003718376159668 # hhh View Code

裝飾帶參數(shù)函數(shù)的裝飾器

def timmer(f): #裝飾器函數(shù)名def inner(a):start = time.time()ret = f(a) #被裝飾的函數(shù)end = time.time()print(end - start)return retreturn inner @timmer #語法糖 def func(a):#被裝飾的函數(shù)time.sleep(0.01)print('fds',a)return 'hhh' # func = timmer(func) ret = func(1) #inner print(ret) # fds 1 # 0.010416269302368164 # hhh View Code def timmer(f): #裝飾器函數(shù)名def inner(*args,**kwargs):start = time.time()ret = f(*args,**kwargs) #被裝飾的函數(shù)end = time.time()print(end - start)return retreturn inner @timmer #語法糖 def func(a,b):#被裝飾的函數(shù)time.sleep(0.01)print('fds',a,b)return '111'@timmer #語法糖 def func1(a):#被裝飾的函數(shù)time.sleep(0.01)print('fds',a)return '222' # func = timmer(func) ret = func(1,2) #inner ret1 = func1(1) # print(ret,ret1) # fds 1 2 # 0.010915040969848633 # fds 1 # 0.01041555404663086 # 111 222 View Code

?

裝飾器的固定模式

def wrapper(func):def inner(*args,**kwargs):ret = func(*args,**kwargs) #被裝飾函數(shù)return retreturn inner() @wrapper #qq = wrapper(qq) def qq():print(123)ret = qq() #相當(dāng)于在執(zhí)行inner() View Code

?

def wrapper(func):def inner(*args,**kwargs):print('在被裝飾器之前做的事:')ret = func(*args,**kwargs)print('在被裝飾的函數(shù)執(zhí)行之后做的事:')return retreturn inner@wrapper def h(day):print("gg")return 'tyw'ret = h(3) print(ret) # 在被裝飾器之前做的事: # gg # 在被裝飾的函數(shù)執(zhí)行之后做的事: # tyw View Code def outer(*args,**kwargs):print(args)print(*args)def inner(*args):print('inner',args)inner(*args) outer(1,2,3) # ==outer(#[1,2,3,4]) # (1, 2, 3) # 1 2 3 # inner (1, 2, 3) View Code def wa():'''一個(gè)哈哈哈的函數(shù):return:'''print('哈哈哈')print(wa.__name__) #查看字符串的函數(shù)名 print(wa.__doc__) #查看函數(shù)注釋 # wa # # 一個(gè)哈哈哈的函數(shù) # :return View Code def wrapper(func): #func = hdef inner(*args,**kwargs):print('在被裝飾器之前做的事:')ret = func(*args,**kwargs)print('在被裝飾的函數(shù)執(zhí)行之后做的事:')return retreturn inner@wrapper def h(day):print("gg")return 'tyw' print(h.__name__)#inner View Code

wraps

from functools import wraps def wrapper(func): #func = h @wraps(func)def inner(*args,**kwargs):print('在被裝飾器之前做的事:')ret = func(*args,**kwargs)print('在被裝飾的函數(shù)執(zhí)行之后做的事:')return retreturn inner@wrapper def h(day):print("gg")return 'tyw' print(h.__name__)#h View Code

?

帶參數(shù)的裝飾器

import time flag = True def timmer_out(flag):def timmer(func):def inner(*args,**kwargs):if flag:start = time.time()ret = func(*args,**kwargs)end = time.time()print(end - start)return retelse:ret = func(*args,**kwargs)return innerreturn timmer @timmer_out(flag) # == timmer = timmer_out(flag)# @timmer def ww():time.sleep(0.1)print('hhh') @timmer_out(flag) def egt():time.sleep(0.1)print('dddgs') flag = False ww() egt() # hhh # 0.10020256042480469 # dddgs # 0.10077428817749023 View Code

?

多個(gè)裝飾器裝飾一個(gè)函數(shù)

def wapper1(func):def inner1():print('wrap1,bf func')func()print('qrp1,af func')return inner1 def wapper2(func):def inner2():print('wrap2,bf func')func()print('qrp2,af func')return inner2 @wapper2 @wapper1 def f():print('in f') f() # wrap2,bf func # wrap1,bf func # in f # qrp1,af func # qrp2,af func View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/rssblogs/p/10925786.html

總結(jié)

以上是生活随笔為你收集整理的Python学习之路--装饰器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。