裝飾器部分:
裝飾器是可呼叫的物件,其引數是另乙個函式(被裝飾的函式)。裝飾器可能會處理被裝飾的函式,將它返回;或者將其替換成另乙個函式或者可呼叫的物件。
@decorate
def target():
print('running target()')
以上例子,通過裝飾器之後,實際執行的是如下方法:
def target():
print('running target()')
target = decorate(target)
這兩個寫法的最終結果是一樣的,從第二個例子可以更直觀的感受裝飾器的效果。將乙個函式作為乙個引數,輸入到另外乙個函式中。接下來我們看乙個實際的例子。
def demo(func):
def inner():
print('runnging the inner()')
return inner #必須返回函式!!!閉包也是,另外會開一篇講解閉包
@demo
def target():
printing('running the target()')
target =target()
列印結果:running inner()
從上面可以看到,執行的是target()函式,如果沒有裝飾器的情況下,列印的必然是 running target(),但是在裝飾器的作用下,列印了running inner。這個過程其實是把target作為乙個引數輸入到了demo函式,然後順序執行了inner函式,而非target函式。
python 裝飾器的第二個特性:匯入即執行:我們可以看到,當傳入target之後,inner函式實際就執行了。
下面再來看乙個例子:
registry =
def register(func):
print('running register(%s)' %func)
return func
@register
def f1():
print('running f1()')
@register
def f2():
print('running f2()')
def f3():
print('running f3()')
def main():
f1()
f2()
f3()
if __name__ == '__main__':
main()
將該檔案作為指令碼,import register匯入模組,即發現[在模組匯入的時候就能夠立即執行,而函式f1,f2(),需要在呼叫的時候,才能被執行。
裝飾器原理分析
實驗一 usr local bin python3 deff name print name defh fun print fun.name defg print jack return fun return g return h f bob def fun1 print fun1 return f...
python裝飾器原理 Python裝飾器原理
裝飾器 decorator 是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯 的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下 decorator def core service 要理解上述 的含義,我們從自定義函式裝...
python裝飾器分析 Python裝飾器舉例分析
概述 裝飾器本質上是乙個python函式,它可以讓其他函式在不需要做任何 變動的前提下增加額外功能,裝飾器的返回值也是乙個函式物件。我們要需要乙個能測試函式執行時間的decorator,可以定義如下 def timer func start time time.time res func args,...