日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

这是我见过最全面的Python装饰器详解!没有学不会这种说法

發布時間:2024/9/30 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 这是我见过最全面的Python装饰器详解!没有学不会这种说法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python裝飾器

剛剛接觸python的裝飾器,簡直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍資料,才有點點開始明白了。

學習python中有什么不懂的地方,小編這里推薦加小編的python學習群:895,817, 687
有任何不懂的都可以在里面交流,還有很好的視頻教程pdf學習資料,大家一起學習交流!

待會我將會和大家一起通過代碼的形式來迷你銀行存款取款的功能,然后通過引入裝飾器來一步一步優化代碼。

廢話不多說夢開始擼代碼。我們去ATM存款取款的過程用代碼來表示大概如下(不大準確,僅僅是為了掩飾需要)

上面是按下按鈕1就存款,否則則取款。

不對,存取款要輸入密碼啊!!!所以,我們要加密碼驗證代碼。
可以看到,雖然實現了密碼驗證功能,但是代碼冗余度比較高,而且現在只模擬了取款和存款功能,然而還有查詢功能,轉賬功能等等,那么冗余度就更高了,而且相對于取款和存款函數來說,復用性沒有那么高,所以我們要進一步優化代碼,把驗證函數寫到取款和存款函數內部。

有沒有什么方法,可以在不改變原函數以及原函數的調用的情況下擴展原函數的功能呢?當然是有的,這就是python中著名的裝飾器。還是使用上面的代碼來演示
從現在開始,上面紅框的代碼不再進行更改,打死也不改,我們來實現有密碼驗證的存取款功能。

裝飾器裝飾有參函數

看下面這段代碼

大家看看這段代碼有沒有什么問題?

運行結果
為了使裝飾器能夠裝飾更多函數,我們進一步優化代碼。


裝飾器裝飾有返回值函數
如圖可以看到,無論被裝飾的函數有無返回值,其結果都無返回值,原因其實很簡單,因為inner()函數根本就沒有返回值。為了實現有返回值的函數被裝飾之后仍然有返回值,需要inner函數與被裝飾函數的返回值保持一致。

可以看到,有返回值的函數被裝飾之后依然有返回值,沒有返回值的函數被裝飾之后則沒有返回值,符合我們想要的結果。

雙重語法糖

為了更加直觀地演示雙重語法糖,我就不再使用上面的例子了。

我先來定義一個函數

現在我有一個需求,我想在’python小白聯盟’的上面打印一行’=‘和一行’’,也就是要實現這種效果。

那么應該怎么寫呢?大家可能都會想到語法糖的疊加,那疊加的方式是以下哪一種呢?


我們來運行一下就知道了
可以看到,疊加的方式應該是**種,也就是說最外層的語法糖先執行。

帶參數的語法糖

為了演示帶參數的語法糖,我再把上面的一張圖搬下來

顯然,紅框部分的代碼冗余度比較高,我們可以使用帶參的語法糖來進行簡化

裝飾器就講到這里,祝大家有個愉快的一天!

總結

以上是生活随笔為你收集整理的这是我见过最全面的Python装饰器详解!没有学不会这种说法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。