作用:優化裝飾器
from functools import wraps #實質:巢狀呼叫,三層巢狀函式匯入wraps
def @wraps(f)
#wraps的語法糖
def inner(*args, **kwargs):
ret = f(*args, **kwargs)
return
ret
return
inner
deff1():
print("
hello, world!")
return'hi
'res =f1()
(res)
print(f1.__name__) #
檢視字串格式的函式名,列印的函式名inner->f1
from functools importwraps
import
time
flag =true
def
def
"""flag為true時函式被裝飾器裝飾
flag為flase時函式正常被呼叫
:param func:
:return:
"""@wraps(func)
def inner(*args, **kwargs): #
聚合if
is_flage:
start =time.time()
ret = func(*args, **kwargs) #
打散 end =time.time()
print(end-start)
return
ret
else
: ret = func(*args, **kwargs)
return
ret
return
inner
return
#def
f1():
time.sleep(1)
print("
hello, world")
return
'joker
'ret =f1()
print(ret)
from functools import現象:wraps
func->f1
@wraps(func)
def inner1(*args, **kwargs):
print("
") #
2 ret = func(*args, **kwargs) #
3, f1()
print("
") #
4return ret #
ret is f1()的返回值,現在是執行inner1()的返回值
return
inner1
func->inner1
@wraps(func)
def inner2(*args, **kwargs):
print("
") #
1 ret = func(*args, **kwargs) #
inner1()
print("
") #
5, 執行完inner1()
return ret #
ret is inner1()的返回值即f1()的返回值,現在是執行inner2()的返回值
return
inner2
#def
f1(a):
print("
hello")
return
a"""
f1指向inner2的記憶體位址,f1()->inner2(),f1()的返回值是inner2()的返回值,也就是f1()函式自身的返回值
"""ret = f1(2)
(ret)
"""結果:
hello
2"""
Python3 高階 裝飾器
1.裝飾器功能 在不修改原函式的情況下,增強函式功能 2.不帶引數的函式 不帶引數的裝飾器 1 foo 被裝飾的函式 2 show time 是裝飾器 coding utf 8 import time def show time func def inner start time time.time...
python3 深入裝飾器
def outer c def inner uname print 我是 end c uname return inner outer def fun 1 uname print f 北京的 fun 1 mike def outer c def inner args,kwargs 通用的形參的設定 ...
Python3裝飾器解析
實現裝飾器知識儲備 1.函式即 變數 白話 函式實參 當作另乙個函式的形參 2.高階函式 a 把乙個函式名當作實參傳給另乙個函式 在不修改被裝飾函式源 的情況下為其新增功能 b 返回值中包涵函式名 說白了,此函式名是巢狀函式名 不修改函式的呼叫方式 3.巢狀函式 高階函式 巢狀函式 裝飾器 詳解im...