1. 程式人生 > >裝置器

裝置器

-c hid DC 裝飾器 ron run In 一行 什麽

裝飾器就是閉包函數的一種應用場景

一 為何要用裝飾器

#開放封閉原則:對修改封閉,對擴展開放

二 什麽是裝飾器

裝飾器他人的器具,本身可以是任意可調用對象,被裝飾者也可以是任意可調用對象。
強調裝飾器的原則:1 不修改被裝飾對象的源代碼 2 不修改被裝飾對象的調用方式
裝飾器的目標:在遵循1和2的前提下,為被裝飾對象添加上新功能

三 裝飾器的使用

技術分享圖片 技術分享圖片
import time
def timmer(func):
    def wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print(‘run time is %s‘ %(stop_time-start_time))
        return res
    return wrapper

@timmer
def foo():
    time.sleep(3)
    print(‘from foo‘)
foo()
技術分享圖片 技術分享圖片 有參裝飾器

四 裝飾器語法

技術分享圖片
被裝飾函數的正上方,單獨一行
        @deco1
        @deco2
        @deco3
        def foo():
            pass

        foo=deco1(deco2(deco3(foo)))
技術分享圖片

五 裝飾器補充:wraps

技術分享圖片
from functools import wraps

def deco(func):
    @wraps(func) #加在最內層函數正上方
    def wrapper(*args,**kwargs):
        return func(*args,**kwargs)
    return wrapper

@deco
def index():
    ‘‘‘哈哈哈哈‘‘‘
    print(‘from index‘)

print(index.__doc__)

裝置器