深入淺出學(xué)習(xí)python裝飾器
之前就了解到了裝飾器, 但是就會(huì)點(diǎn)皮毛, 而且對其調(diào)用方式感到迷茫,正好現(xiàn)在的項(xiàng)目我想優(yōu)化,就想到了用裝飾器, 因此深入研究了下裝飾器.
先看下代碼:
import time # 將函數(shù)作為參數(shù)傳入到此方法.... def timeif(func): def wrapper(arg): print("in wrapper() %s" % (arg)) start = time.clock() func(arg) end = time.clock() print("used: %s %s" % (end-start, arg)) return wrapper @timeif def foo(arg): print("in foo() %s" % (arg)) if __name__ == '__main__': foo(" Hello ") # 表示執(zhí)行foo函數(shù)....
我的疑惑就是明明return 的是一個(gè)函數(shù)名,按道理來講,返回的就是一個(gè)函數(shù)地址??!我理解有問題?隨后上網(wǎng)查資料,又是閉包....但是我個(gè)人對它不感冒,隨后自己分析,總結(jié)出了一段程序,看完你就知道原因了.
程序:
# coding=utf-8 # 帶參數(shù)的函數(shù) 返回一個(gè)函數(shù)地址就行.... def funX(x): def funY(): return x return funY # 不帶參數(shù)的函數(shù).... def funX1(): print("調(diào)用函數(shù)funX1") def funY1(): print("調(diào)用函數(shù)funY1") return funY1 if __name__ == '__main__': # print(funX(5)()) # 調(diào)用有參數(shù)的嵌套函數(shù)... print(funX1()()) # 調(diào)用無參數(shù)的嵌套函數(shù)...
這和我們的裝飾器不像嗎?這就是我們的裝飾器!因此,我們可以按照上面的程序來理解,也就是說它是首先確定參數(shù)個(gè)數(shù),隨后分別傳入的,下面,我們來改寫代碼:
# coding=utf-8 import time # 將函數(shù)作為參數(shù)傳入到此方法.... def timeif(func): def wrapper(arg): print("in wrapper() %s" % (arg)) start = time.clock() func(arg) end = time.clock() print("used: %s %s" % (end-start, arg)) return wrapper # @timeif def foo(arg): print("in foo() %s" % (arg)) if __name__ == '__main__': timeif(foo)(' Hello')
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python多線程threading創(chuàng)建及使用方法解析
這篇文章主要介紹了Python多線程threading創(chuàng)建及使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Python中等待5秒并暫停執(zhí)行的方法總結(jié)
Python 具有各種功能和庫來創(chuàng)建交互式應(yīng)用程序,用戶可以在其中提供輸入和響應(yīng), 我們可以創(chuàng)建需要暫停應(yīng)用程序執(zhí)行的情況,本文主要和大家分享三個(gè)Python 中等待 5 秒并暫停執(zhí)行的方法,有需要的可以參考下2023-10-10Python2和Python3讀取文本文件的區(qū)別及說明
這篇文章主要介紹了Python2和Python3讀取文本文件的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python實(shí)現(xiàn)格式化輸出的實(shí)例詳解
這篇文章主要為大家介紹了Python語法中實(shí)現(xiàn)格式化輸出的方法,本文通過幾個(gè)實(shí)例為大家進(jìn)行了詳細(xì)的講解,感興趣的小伙伴可以了解一下2022-08-08python編程PyQt5創(chuàng)建按鈕及觸發(fā)點(diǎn)擊事件示例解析
這篇文章主要為大家介紹了python編程使用PyQt5如何創(chuàng)建按鈕及觸發(fā)點(diǎn)擊事件的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10