91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python裝飾器怎么實現

發布時間:2021-11-22 16:57:34 來源:億速云 閱讀:129 作者:iii 欄目:編程語言

這篇文章主要介紹“Python裝飾器怎么實現”,在日常操作中,相信很多人在Python裝飾器怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python裝飾器怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Python裝飾器怎么實現  

Python裝飾器怎么實現  

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

不對,存取款要輸入密碼啊!!!所以,我們要加密碼驗證代碼。

Python裝飾器怎么實現

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

Python裝飾器怎么實現  

Python裝飾器怎么實現  

有沒有什么方法,可以在不改變原函數以及原函數的調用的情況下擴展原函數的功能呢?當然是有的,這就是python中著名的裝飾器。還是使用上面的代碼來演示

Python裝飾器怎么實現  

從現在開始,上面紅框的代碼不再進行更改,打死也不改,我們來實現有密碼驗證的存取款功能。

Python裝飾器怎么實現  

Python裝飾器怎么實現  

裝飾器裝飾有參函數

看下面這段代碼

Python裝飾器怎么實現  

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

運行結果

Python裝飾器怎么實現  

看報錯原因就知道,inner()函數多了一個參數。大家一定要注意一點,因為裝飾器函數的返回值是inner,也就是說現在myprint是等同于inner的。

我們來改一下代碼

Python裝飾器怎么實現  

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

Python裝飾器怎么實現  

裝飾器裝飾有返回值函數

Python裝飾器怎么實現  

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

Python裝飾器怎么實現  

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

雙重語法糖

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

我先來定義一個函數

Python裝飾器怎么實現  

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

Python裝飾器怎么實現  

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

Python裝飾器怎么實現  

Python裝飾器怎么實現  

我們來運行一下就知道了

Python裝飾器怎么實現  

可以看到,疊加的方式應該是***種,也就是說最外層的語法糖先執行。

帶參數的語法糖

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

Python裝飾器怎么實現  

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

Python裝飾器怎么實現  

到此,關于“Python裝飾器怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宿迁市| 建水县| 嘉兴市| 夏津县| 乌兰浩特市| 崇文区| 新乡市| 靖州| 江阴市| 济宁市| 合阳县| 海口市| 渝中区| 黄冈市| 株洲市| 新田县| 四会市| 东丰县| 西吉县| 靖西县| 扎鲁特旗| 张掖市| 克山县| 博乐市| 咸丰县| 常州市| 淮阳县| 万山特区| 阿鲁科尔沁旗| 喀什市| 阜康市| 镇赉县| 新乡市| 乐业县| 成都市| 长子县| 汽车| 化德县| 虎林市| 桑日县| 麦盖提县|