之前就了解到了裝飾器, 但是就會點皮毛, 而且對其調(diào)用方式感到迷茫,正好現(xiàn)在的項目我想優(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 @timeifdef foo(arg): print("in foo() %s" % (arg))if __name__ == '__main__': foo(" Hello ") # 表示執(zhí)行foo函數(shù)....
我的疑惑就是明明return 的是一個函數(shù)名,按道理來講,返回的就是一個函數(shù)地址??!我理解有問題?隨后上網(wǎng)查資料,又是閉包....但是我個人對它不感冒,隨后自己分析,總結(jié)出了一段程序,看完你就知道原因了.
程序:
# coding=utf-8# 帶參數(shù)的函數(shù) 返回一個函數(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 funY1if __name__ == '__main__': # print(funX(5)()) # 調(diào)用有參數(shù)的嵌套函數(shù)... print(funX1()()) # 調(diào)用無參數(shù)的嵌套函數(shù)...
這和我們的裝飾器不像嗎?這就是我們的裝飾器!因此,我們可以按照上面的程序來理解,也就是說它是首先確定參數(shù)個數(shù),隨后分別傳入的,下面,我們來改寫代碼:
# coding=utf-8import 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# @timeifdef foo(arg): print("in foo() %s" % (arg))if __name__ == '__main__': timeif(foo)(' Hello')
立即學(xué)習(xí)“Python免費學(xué)習(xí)筆記(深入)”;
以上就是python 裝飾器的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
python怎么學(xué)習(xí)?python怎么入門?python在哪學(xué)?python怎么學(xué)才快?不用擔(dān)心,這里為大家提供了python速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號