實現裝飾器知識儲備:1.函式即"變數" (白話:函式實參 當作另乙個函式的形參)
2.高階函式
a:把乙個函式名當作實參傳給另乙個函式(
在不修改被裝飾函式源**的情況下為其新增功能)
b:返回值中包涵函式名(說白了,此函式名是巢狀函式名)(不修改函式的呼叫方式)
3.巢狀函式
《高階函式+巢狀函式》=裝飾器
》**詳解
import timedef bar():
time.sleep(3)
print("i am bar")
def deco(fun):
def test1():#呵呵 debug這步 沒什麼卵用,就是宣告了乙個函式,沒呼叫。其實此刻它就是位址即變數,切記,別想著到到這步的執行過程,切記,只是申明。
start_time=time.time()
fun()
end_time=time.time()
print("用時:%s"%(end_time-start_time))
return test1
# 這一步關鍵,上面兩個函式都在申明,沒有呼叫,沒卵用,
#此時bar是接受 deco(bar)的返回值 test1,test1是個位址即變數,加上括號,就是呼叫,
#變數可以賦值,賦值給bar的 加上括號 就是呼叫。test()=bar()
bar=deco(bar)
bar() #-->實際這是在呼叫tes1()
'''綜上 以後在裝飾器 滿足原則的條件下,實際在執行巢狀函式,由高階函式的返回值加括號執行,
即把巢狀函式的函式名作為高階函式的返回值,返回值()=巢狀函式名(),
又因返回值是個變數,變數可以賦值,賦值給被裝飾函式名()
其滿足裝飾器其二原則,不改變被裝飾函式的呼叫方式
'''
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.不帶引數的函式 不帶引數的裝飾器 1 foo 被裝飾的函式 2 show time 是裝飾器 coding utf 8 import time def show time func def inner start time time.time...
python3裝飾器 高階
作用 優化裝飾器 from functools import wraps 匯入wraps def wraps f wraps的語法糖 def inner args,kwargs ret f args,kwargs return ret return inner deff1 print hello,w...