發表於 Python教學

【Python】修飾點綴你的functon吧! 裝飾器 decorator

今天要來跟大家聊聊一個很多人都會搞不懂的咚咚!

那就是我們的~~~~~ Decorator !

我們想像一下這個小情境

假設今天我們是一個有記帳好習慣的乖小孩(就像我 耶!)

每次花費我們都會希望自己做一下紀錄

那我們在花費的時候就要在螢幕上寫出

我花錢了!!

那我們會怎麼寫呢?

decorator_1_bad_example

可是不覺得這樣每花一次前就要多寫一次很不方便嗎???

所以我們會希望能在每次花錢之前都自動記錄一下

“我花錢了!!"這件事

所以我們要用裝飾器裝飾一下!

先用最簡單的版本寫一下

decorator_2_first_example在開始花錢之前我就先用 record_bill 來修是我的function

在 record_bill 裡面的 f 就代表傳進去的 spend_money!!

為什麼呢?

因為@record_bill的意思就是

spend_money = record_bill(spend_money)

可以看到在真正呼叫f(就是spend_money)前我就先說了"我花錢啦!!"

這樣如果要做很多次spend_money的話就不用一直重複寫那行print啦

可是不覺得哪裡怪怪的嗎?

這樣money不是固定只能扣100嗎?!

這樣跟真正的記帳根本不一樣啊!!!

所以我們需要的是一個可以傳參數的 裝飾器 啦!!

decorator_3_args_example

這樣的話需要在多一層的function去接收額外的參數喔!!

這樣是不是就比較正常一些了呢!!!更像一般的記帳了吧!!

最近研究了一下自己寫 Decorator 要怎麼寫所以就來記錄順邊分享一下想法了~

但是其實自己寫裝飾器有一個比較雷的地方就是在做logging的時候呼叫 function name的話會有問題,這時候就會需要用到別人已經寫好的套件 funtools 來幫助我們改善。

至於 funtools 的心得我就下一篇再介紹吧~~~

不知道大家是不是比較了解一些了呢?

如果有問題的話歡迎在底下留言喔!

那我們下次再見啦~

參考資料:

http://ot-note.logdown.com/posts/67571/-decorator-with-without-arguments-in-function-class-form

廣告

作者:

一位 熱愛資工領域、喜歡好笑事物、偶爾打打網球 的學生 ! For A Better Me!

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.