首頁 > 後端開發 > Python教學 > Python直 裝飾器

Python直 裝飾器

大家讲道理
發布: 2017-08-19 14:47:35
原創
2318 人瀏覽過

之前就了解到了裝飾器, 但是就會點皮毛, 而且對其調用方式感到迷茫,正好現在的項目我想優化,就想到了用裝飾器, 因此深入研究了下裝飾器.

先看下程式碼:


import time# 将函数作为参数传入到此方法....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 ")  # 表示执行foo函数....
登入後複製


#我的疑惑就是明明return 的是一個函數名,照道理來講,回傳的就是一個函數位址啊!我理解有問題?隨後上網查資料,又是閉包....但是我個人對它不感冒,隨後自己分析,總結出了一段程序,看完你就知道原因了.
程序:


#
# coding=utf-8# 带参数的函数  返回一个函数地址就行....def funX(x):    def funY():        return x    return funY# 不带参数的函数....def funX1():    print("调用函数funX1")    def funY1():        print("调用函数funY1")    return funY1if __name__ == '__main__':    # print(funX(5)())  # 调用有参数的嵌套函数...
    
    print(funX1()())  # 调用无参数的嵌套函数...
登入後複製


這和我們的裝飾器不像嗎?這就是我們的裝飾器!因此,我們可以按照上面的程式來理解,也就是說它是先確定參數個數,然後分別傳入的,下面,我們來改寫程式碼:


# coding=utf-8import time# 将函数作为参数传入到此方法....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')
登入後複製


#

以上是Python直 裝飾器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
python - ubuntu16.04 lxml的報錯
來自於 1970-01-01 08:00:00
0
0
0
有辦法在PHP裡寫Python嗎?
來自於 1970-01-01 08:00:00
0
0
0
python scrapy爬蟲錯誤
來自於 1970-01-01 08:00:00
0
0
0
python相關問題求解決,有償
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板