中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python裝飾器實現函數運行時間的計算

發布時間:2022-02-14 09:34:21 來源:億速云 閱讀:378 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么用Python裝飾器實現函數運行時間的計算”,在日常操作中,相信很多人在怎么用Python裝飾器實現函數運行時間的計算問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python裝飾器實現函數運行時間的計算”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    個人理解

    裝飾器: 通過閉包和將一個函數作為另一個函數參數的形式,實現已有功能的靈活調用

    例如:

    首先設置了一個time_master的計時器函數,在運行某個函數的同時,用來統計函數的耗時

    那么,如果想知道函數性能, 每次寫完新的函數后,都放到time_master函數中運行一次來統計。

    ——> 這是比較麻煩的。相當于雖然有了一個稱,但是所有的新買食材都需要逐個放到稱上去稱一遍,來獲得食材的重量

    ——> 如果能夠省略掉一次一次上稱這個步驟就好了

    ——> 比如每個食材進門的同時就從稱上走過,那進來的同時,也就有了重量的數據

    例子:調用函數的同時對函數進行計時

    實現方法1:@語法糖

    代碼:
    # 涉及到計時,需要引入time模塊
    import time
    # 定義一個對函數運行耗時統計的計時器,用func作為形參來代替需要統計的函數
    def time_master(func):
        def call_func():
            print("計時器開始:函數開始調用:")
            start_time = time.time()
            func()
            end_time = time.time()
            print('計時器結束,函數調用完成')
            return print(f'計時器結果返回:函數調用耗時{end_time-start_time:.2f}')
        return call_func
    @time_master 
    # 即在調用myfunc函數時,不是直接調用myfunc
    # 而是將myfunc函數作為一個參數放入到@的裝飾器中,然后去調用裝飾器
    def myfunc():
        time.sleep(2)
        print('myfunc函數運行')
        time.sleep(4)
        print('myfunc函數運行結束')
    myfunc()  # 調用myfunc
    實現結果:

    計時器開始:函數開始調用:
    myfunc函數運行
    myfunc函數運行結束
    計時器結束,函數調用完成
    計時器結果返回:函數調用耗時6.01

    實現方法2:閉包

    可以理解成,本來定義了一個myfunc的函數,但這個函數本身沒有計時的功能,而恰巧有一個time_master的函數,在運行子函數的同時,還會對子函數進行計時

    因此,通過重新定義 myfunc = time_master(myfunc), 即將myfunc作為參數傳入到time_master中,作為myfunc函數的新定義

    代碼:
    import time
    def time_master(func):
        def call_func():
            print("計時器開始:函數開始調用:")
            start_time = time.time()
            func()
            end_time = time.time()
            print('計時器結束,函數調用完成')
            print(f'計時器結果返回:函數調用耗時{end_time-start_time:.2f}')
        return call_func
    def myfunc():
        time.sleep(2)
        print('myfunc函數運行')
        time.sleep(4)
        print('myfunc函數運行結束')
    myfunc = time_master(myfunc)  # 和實現方法一的差距就在于是在myfunc前面@裝飾器,還是在后面對myfunc函數進行二次定義
    myfunc()
    實現結果:

    計時器開始:函數開始調用:
    myfunc函數運行
    myfunc函數運行結束
    計時器結束,函數調用完成
    計時器結果返回:函數調用耗時6.01

    實現方式1和 2的差異

    實現方式1和實現方式2: 其實沒什么區別,無非是一開始就用@time_master來規定,還是定義完myfunc之后,再多做一步讓myfun放入time_master中去執行

    到此,關于“怎么用Python裝飾器實現函數運行時間的計算”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    杭锦后旗| 新竹市| 堆龙德庆县| 乐安县| 曲麻莱县| 伊金霍洛旗| 绥阳县| 西安市| 横山县| 广汉市| 江达县| 庆云县| 绥芬河市| 抚远县| 和林格尔县| 普陀区| 西藏| 顺昌县| 会宁县| 汨罗市| 外汇| 阿城市| 益阳市| 盘山县| 瓮安县| 道真| 巴里| 增城市| 西乌| 新巴尔虎左旗| 阿拉善右旗| 香格里拉县| 嵊州市| 芜湖市| 黎川县| 巫山县| 名山县| 柘城县| 绥芬河市| 定南县| 科尔|