python裝飾器應該算是面試常考到的用點,之前在flask的應用中也是會常常用到,抽空仔細看書查資料理解了下裝飾器的概念,通過自己的理解記憶,應該對這個概念會有乙個大致上具體的了解。
閉包說起python裝飾器,我們應該不得不談談閉包的概念。
我對閉包的理解是,當函式存在巢狀,子函式呼叫了父函式的變數,那麼子函式體加上父函式中呼叫的變數,那麼這時候子函式加上這個呼叫的變數,就形成了乙個閉包。如果子函式沒有呼叫父函式的變數,那麼就不存在閉包。我們可以來看一段**:
in [7]: def fun1():
...: a,b,c = 1,2,3
...: def fun2():
...: x = 1
...: return x+a
...: return fun2
in [8]: foo = fun1()
in [9]: foo()
out[9]: 2
在這裡,fun2和fun1中的a形成了乙個閉包。每次呼叫父函式中的值的時候,就會產生乙個新的閉包,如果我這裡用的是b或者c,那麼會產生不一樣的閉包。
我們可以發現,在這裡,我們傳遞的是乙個整數。當我們傳遞的是乙個函式的時候,那麼就成了乙個裝飾器。裝飾器的本質就是函式閉包,利用了函式閉包的特性
裝飾器in [3]: def decorator(func):
...: print "{} is running".format(func.__name__)
...: return func()
in [4]: def foo():
...: print "i'm the function"
foo is running
i'm the function
在這裡decorator就是裝飾器,它將func包裝起來這裡的**相當繁瑣,這時候我們可以用python的語法糖來進行修飾@。**如下
in [9]: @decorator
...: def bar():
...: print "i'm the guy"
in [11]: bar()
bar is running
i'm the guy
這裡只是簡單的裝飾器的用法,後續還會討論分析其他的用法
參考知乎:如何理解python裝飾器
深入淺出python裝飾器
python裝飾器理解 python裝飾器理解
裝飾器 在不改變原函式的 和呼叫方法的基礎上,給原函式增加額外的功能 理解宣告 為了方便理解,以下例子採用最簡潔的函式和新增的功能 給原函式新增乙個執行時間 import time def timer func def inner func return inner timer func timer...
python裝飾器 理解Python裝飾器
在python中,對於乙個函式,若想在其執行前後做點什麼,那麼裝飾器是再好不過的選擇,話不多說,上 usr bin env coding utf 8 script 01.py author howie from functools import wraps def decorator func wr...
python裝飾器理解
裝飾器,網上有很多文章,描述裝飾器,看了總是半知半解,現在是終於明白裝飾器的用法了 deco arg def func argc,argv pass 等同於 equal 說明 後面的func是指原定義的func,前面的func是指使用裝飾器 裝飾 後,我們再去使用的func定義,有點拗口 func ...