Python3裝飾器解析

2022-09-20 04:48:10 字數 969 閱讀 3493

實現裝飾器知識儲備:

1.函式即"變數" (白話:函式實參 當作另乙個函式的形參)

2.高階函式

a:把乙個函式名當作實參傳給另乙個函式(

在不修改被裝飾函式源**的情況下為其新增功能)

b:返回值中包涵函式名(說白了,此函式名是巢狀函式名)(不修改函式的呼叫方式)

3.巢狀函式

《高階函式+巢狀函式》=裝飾器

》**詳解

import time

def 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...