def logging(level): def wrapper(func): def inner_wrapper(*args, **kwargs): print "[{level}]: enter function {func}()".format( level=level, func=func.__name__) return func(*args, **kwargs) return inner_wrapper return wrapper @logging(level="INFO") def say(something): print "say {}!".format(something) # 如果沒有使用@語法,等同于 # say = logging(level="INFO")(say) @logging(level="DEBUG") def do(something): print "do {}...".format(something) if __name__ == "__main__": say("hello") do("my work")
裝飾器調用順序
#!/usr/bin/env python # encoding: utf-8 def decorator_a(func): print func print "Get in decorator_a" def inner_a(*args, **kwargs): print "Get in inner_a" return func(*args, **kwargs) return inner_a def decorator_b(func): print func print "Get in decorator_b" def inner_b(*args, **kwargs): print "Get in inner_b" return func(*args, **kwargs) return inner_b @decorator_b @decorator_a def f(x): print "Get in f" return x * 2 f(1)
執行結果
Get in decorator_a Get in decorator_b Get in inner_b Get in inner_a Get in f
f(1)等價于decorator_b(decorator_a(f))(1)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42924.html
摘要:如果不使用裝飾器的話,普通的做法可能是在中寫一堆校驗代碼來判斷用戶是否登錄,然后決定后面的執行邏輯,這樣比較麻煩。 前言 裝飾器是程序開發中經常會用到的一個功能,也是python語言開發的基礎知識,如果能夠在程序中合理的使用裝飾器,不僅可以提高開發效率,而且可以讓寫的代碼看上去顯的高大上^_^ 使用場景 可以用到裝飾器的地方有很多,簡單的舉例如以下場景 引入日志 函數執行時間統計 執...
摘要:探究多個裝飾器執行順序裝飾器是用于封裝函數或代碼的工具,網上可以搜到很多文章可以學習,我在這里要討論的是多個裝飾器執行順序的一個迷思。這時候你該知道為什么輸出結果會是那樣,以及對裝飾器執行順序實際發生了什么有一定了解了吧。 探究多個裝飾器執行順序 裝飾器是Python用于封裝函數或代碼的工具,網上可以搜到很多文章可以學習,我在這里要討論的是多個裝飾器執行順序的一個迷思。 疑問 大部...
摘要:最近看到一個關于的題文章其中的一個是裝飾器的順序問題就想寫篇博客回顧下裝飾器首先強烈推薦很久之前看的一篇博文翻譯理解中的裝飾器關于什么是裝飾器看這篇文章就好了這里主要想寫關于多個裝飾器的執行流程裝飾順序示例代碼初始化初始化輸出結果初始化初始 最近看到一個關于Flask的CTF(RealWorld CTF 2018 web題bookhub)文章其中的一個trick是裝飾器的順序問題,就想...
今天講一下python中裝飾器的執行順序,以兩個裝飾器為例。 裝飾器代碼如下: def wrapper_out1(func): print(--out11--) def inner1(*args, **kwargs): print(--in11--) ret = func(*args, **kwargs) print(--in12-...
摘要:在這種代碼運行期間動態增加功能的方式,稱之為裝飾器。四接收特定類型參數的裝飾器裝飾器可以接收參數,當調用裝飾器返回的函數時,也就調用了包裹函數,把參數傳入包裹函數,它將參數傳遞給被裝飾的函數。執行結果執行結果 【題外話】心塞塞 心情down down down 有段時間沒用裝飾器了,然后然后問著就跪了~~~回來翻了翻資料和代碼...... 一、什么是裝飾器 裝飾器,decor...
摘要:裝飾器的使用符合了面向對象編程的開放封閉原則。三簡單的裝飾器基于上面的函數執行時間的需求,我們就手寫一個簡單的裝飾器進行實現。函數體就是要實現裝飾器的內容。類裝飾器的實現是調用了類里面的函數。類裝飾器的寫法比我們裝飾器函數的寫法更加簡單。 目錄 前言 一、什么是裝飾器 二、為什么要用裝飾器 ...
閱讀 1000·2021-11-22 13:52
閱讀 1441·2021-11-19 09:40
閱讀 3122·2021-11-16 11:44
閱讀 1263·2021-11-15 11:39
閱讀 3893·2021-10-08 10:04
閱讀 5333·2021-09-22 14:57
閱讀 3096·2021-09-10 10:50
閱讀 3177·2021-08-17 10:13