很多同學都看到python代碼中函數上有神奇的裝飾器,那麼什麼是裝飾器,他又能解決什麼問題呢?
實際上裝飾器的本質很多同學都已經學過了,那就是閉包。
閉包
閉包簡單來說,就是閉包就是能夠讀取其他函數内部變量的函數(外部函數中嵌套一個内部函數,并引用了外部函數的變量)。可以将閉包的特性總結為三點:
(1)可以外部訪問函數内部變量
(2)内部函數可以訪問外層函數變量
(3)局部變量可以常駐内存
如上圖案例中,在函數A中嵌套一個函數B,并且引用了函數A的變量x,這就是一個簡單的閉包。
執行函數時也是按順序執行,a=A(10)參數10傳給A并将B的引用賦值給a,a(5)執行B(5)
需要注意的是返回函數B時不能加括号。
裝飾器裝飾器的本質就是一個閉包,而且是更加簡單方便的閉包使用方式,可以在不改變原有的函數結構上添加功能。
那麼裝飾器到底怎麼使用呢?
咱們啊從實際使用角度出發,一切的概念和語法都是為了解決問題才出現的,比如甲方現在的需求就是要電子秤顯示體重。
咱就不細寫,簡化一下,上面n就是體重,直接返回體重的數值就OK了。
突然啊,就很突然,這個時候甲方需求變了,不行,要加上一個去衣服重量,美少女怎麼可能160斤呢,一定是衣服太重。
但是去皮功能,這樣就要重新再原有的函數中跟改破壞原有的結構(雖然這個結構就一句話,但是不行,不能改),此時此刻就到了我們的主角裝飾器的登場。
相當的簡單。
當然了裝飾器不止是函數,類也可以,我們看看使用類的效果吧。
當然這本質上和函數閉包沒有區别,依靠類方法的call來實現的直接調用。
上面就是我自己在學習中對于python裝飾器的一些淺薄的理解和運用拉,不過還是非常方便的使用起來也讓代碼簡潔不少。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!