python_為被裝飾的函數保留中繼資料

來源:互聯網
上載者:User

標籤:default   **kwargs   時間   name   運行   返回   儲存   nts   ==   

案例:

       在函數對象中儲存著一些函數的中繼資料,如:

              f.__name__           函數名

              f.__doc__              函數文檔

              f.__moudle__       函數所屬模組名

              f.__dict__              屬性字典

              f.__defaults__       預設參數組

              ……

       在使用裝飾器後,在裝飾器裡訪問以上屬性時,我們看到的是裝飾器函數的中繼資料

       需求:

              實現在裝飾器函數中,保留 被裝飾函數 的中繼資料

如何??

       通過 functools中的wraps, update_wrapper方法實現,每個都可單獨實現

#!/usr/bin/python3import timefrom functools import (wraps, update_wrapper, WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES)def count_time(func):    """    給目標函數加上計算已耗用時間統計    """    # 這個裝上器和update_wrapper一樣,預設參數WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES    @wraps(func)    def wrapper(*args, **kwargs):        start_time = time.time()                # 定義result接收函數傳回值,並且在裝飾函數最後返回回去        resutl = func(*args, **kwargs)        print(‘已耗用時間:‘, time.time()-start_time)        return resutl        # 其中預設參數 WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES    # update_wrapper(wrapper, func)    return wrapper@count_timedef add(num=100):    """    計算 0~num 累加值,預設num=100    """    time.sleep(1)    return sum([x for x in range(num+1)])if __name__ == ‘__main__‘:    print(‘函數名:‘, add.__name__)    print(‘屬性字典:‘, add.__dict__)    print(‘函數預設參數:‘, add.__defaults__)    print(‘函數所在模組:‘, add.__module__)    print(‘函數文檔:‘, add.__doc__)        # 列印兩個預設參數    print(WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES)    result = add()    print(result)

  

python_為被裝飾的函數保留中繼資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.