這是我見過最全面的Python裝飾器詳解敬飒!沒有學(xué)不會這種說法

python裝飾器

剛剛接觸python的裝飾器,簡直懵逼了芬位,直接不懂什么意思啊有木有无拗,自己都忘了走了多少遍Debug,查了多少遍資料昧碉,才有點(diǎn)點(diǎn)開始明白了英染。

這是我見過最全面的Python裝飾器詳解!沒有學(xué)不會這種說法

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

廢話不多說夢開始擼代碼。我們?nèi)TM存款取款的過程用代碼來表示大概如下(不大準(zhǔn)確狭握,僅僅是為了掩飾需要)

這是我見過最全面的Python裝飾器詳解闪金!沒有學(xué)不會這種說法
這是我見過最全面的Python裝飾器詳解!沒有學(xué)不會這種說法

上面是按下按鈕1就存款论颅,否則則取款哎垦。

不對,存取款要輸入密碼靶崂薄:撤骸!澡谭!所以,我們要加密碼驗(yàn)證代碼损俭。

這是我見過最全面的Python裝飾器詳解蛙奖!沒有學(xué)不會這種說法

可以看到,雖然實(shí)現(xiàn)了密碼驗(yàn)證功能杆兵,但是代碼冗余度比較高雁仲,而且現(xiàn)在只模擬了取款和存款功能,然而還有查詢功能琐脏,轉(zhuǎn)賬功能等等攒砖,那么冗余度就更高了缸兔,而且相對于取款和存款函數(shù)來說,復(fù)用性沒有那么高吹艇,所以我們要進(jìn)一步優(yōu)化代碼惰蜜,把驗(yàn)證函數(shù)寫到取款和存款函數(shù)內(nèi)部。

這是我見過最全面的Python裝飾器詳解受神!沒有學(xué)不會這種說法
這是我見過最全面的Python裝飾器詳解抛猖!沒有學(xué)不會這種說法

有沒有什么方法,可以在不改變原函數(shù)以及原函數(shù)的調(diào)用的情況下擴(kuò)展原函數(shù)的功能呢鼻听?當(dāng)然是有的财著,這就是python中著名的裝飾器。還是使用上面的代碼來演示

這是我見過最全面的Python裝飾器詳解撑碴!沒有學(xué)不會這種說法

從現(xiàn)在開始撑教,上面紅框的代碼不再進(jìn)行更改,打死也不改醉拓,我們來實(shí)現(xiàn)有密碼驗(yàn)證的存取款功能伟姐。

這是我見過最全面的Python裝飾器詳解!沒有學(xué)不會這種說法
這是我見過最全面的Python裝飾器詳解廉嚼!沒有學(xué)不會這種說法

裝飾器裝飾有參函數(shù)

看下面這段代碼

這是我見過最全面的Python裝飾器詳解玫镐!沒有學(xué)不會這種說法

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

運(yùn)行結(jié)果

這是我見過最全面的Python裝飾器詳解怠噪!沒有學(xué)不會這種說法

看報(bào)錯(cuò)原因就知道恐似,inner()函數(shù)多了一個(gè)參數(shù)。大家一定要注意一點(diǎn)傍念,因?yàn)檠b飾器函數(shù)的返回值是inner矫夷,也就是說現(xiàn)在myprint是等同于inner的。

我們來改一下代碼

這是我見過最全面的Python裝飾器詳解憋槐!沒有學(xué)不會這種說法

為了使裝飾器能夠裝飾更多函數(shù)双藕,我們進(jìn)一步優(yōu)化代碼。

這是我見過最全面的Python裝飾器詳解阳仔!沒有學(xué)不會這種說法

裝飾器裝飾有返回值函數(shù)

這是我見過最全面的Python裝飾器詳解忧陪!沒有學(xué)不會這種說法

如圖可以看到,無論被裝飾的函數(shù)有無返回值近范,其結(jié)果都無返回值嘶摊,原因其實(shí)很簡單,因?yàn)閕nner()函數(shù)根本就沒有返回值评矩。為了實(shí)現(xiàn)有返回值的函數(shù)被裝飾之后仍然有返回值叶堆,需要inner函數(shù)與被裝飾函數(shù)的返回值保持一致。

這是我見過最全面的Python裝飾器詳解斥杜!沒有學(xué)不會這種說法

可以看到虱颗,有返回值的函數(shù)被裝飾之后依然有返回值沥匈,沒有返回值的函數(shù)被裝飾之后則沒有返回值,符合我們想要的結(jié)果忘渔。

雙重語法糖

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

我先來定義一個(gè)函數(shù)

這是我見過最全面的Python裝飾器詳解辨萍!沒有學(xué)不會這種說法

現(xiàn)在我有一個(gè)需求棋恼,我想在'python小白聯(lián)盟'的上面打印一行'='和一行'*',也就是要實(shí)現(xiàn)這種效果锈玉。

這是我見過最全面的Python裝飾器詳解爪飘!沒有學(xué)不會這種說法

那么應(yīng)該怎么寫呢?大家可能都會想到語法糖的疊加拉背,那疊加的方式是以下哪一種呢师崎?

這是我見過最全面的Python裝飾器詳解!沒有學(xué)不會這種說法
這是我見過最全面的Python裝飾器詳解椅棺!沒有學(xué)不會這種說法

我們來運(yùn)行一下就知道了

這是我見過最全面的Python裝飾器詳解犁罩!沒有學(xué)不會這種說法

可以看到,疊加的方式應(yīng)該是***種两疚,也就是說最外層的語法糖先執(zhí)行床估。

帶參數(shù)的語法糖

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

這是我見過最全面的Python裝飾器詳解诱渤!沒有學(xué)不會這種說法

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

這是我見過最全面的Python裝飾器詳解勺美!沒有學(xué)不會這種說法

裝飾器就講到這里递胧,祝大家有個(gè)愉快的一天!

注:我這有個(gè)學(xué)習(xí)Python基地赡茸,里面有很多學(xué)習(xí)資料缎脾,感興趣的+Q群:895817687

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市占卧,隨后出現(xiàn)的幾起案子遗菠,更是在濱河造成了極大的恐慌,老刑警劉巖华蜒,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舷蒲,死亡現(xiàn)場離奇詭異,居然都是意外死亡友多,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門堤框,熙熙樓的掌柜王于貴愁眉苦臉地迎上來域滥,“玉大人纵柿,你說我怎么就攤上這事∑舸拢” “怎么了昂儒?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長委可。 經(jīng)常有香客問我渊跋,道長,這世上最難降的妖魔是什么着倾? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任拾酝,我火速辦了婚禮,結(jié)果婚禮上卡者,老公的妹妹穿的比我還像新娘蒿囤。我一直安慰自己,他們只是感情好崇决,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布材诽。 她就那樣靜靜地躺著,像睡著了一般恒傻。 火紅的嫁衣襯著肌膚如雪脸侥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天盈厘,我揣著相機(jī)與錄音睁枕,去河邊找鬼。 笑死扑庞,一個(gè)胖子當(dāng)著我的面吹牛譬重,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罐氨,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼臀规,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了栅隐?” 一聲冷哼從身側(cè)響起塔嬉,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎租悄,沒想到半個(gè)月后谨究,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泣棋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年胶哲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潭辈。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸯屿,死狀恐怖澈吨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寄摆,我是刑警寧澤谅辣,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站婶恼,受9級特大地震影響桑阶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勾邦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一蚣录、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧检痰,春花似錦包归、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椎椰,卻和暖如春厦幅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慨飘。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工确憨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓤的。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓休弃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親圈膏。 傳聞我的和親對象是個(gè)殘疾皇子塔猾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容