為什麼要寫method?
程式碼就這樣一行一行的寫不好嗎? 當你的程式碼超過一定的行數的時候,一行一行的寫就不會是個好的寫法。通常我們會用一個抽象的名詞,來把一群連續或複合的動作給包在一起,這樣一來程式碼變得有系統了,心情也會變得比較好,重點是,會寫method,就容易會有種變成高手的錯覺!
雖然這也許是玩笑話,但把程式碼整理到method裡,程式碼會變得比較好維護,而且也更容易可以重複使用。
定義
1 2 3 4 5 6 7 8 | |
第1行的calc_method比較容易懂,這個method會接收2個參數,其中一個還是有預設值的;第4行的args_method後面的參數加了一顆*,表示傳進去的參數args會被集中成一個Tuple;而第7行的kwargs_method則會把傳進去的參數kwargs集中成一個Dictionary。
pass!! 什麼都不做..?
前面提到Python的程式是靠縮排來區分code block的,不過如果我們寫了一個method,但裡面目前還沒想到要寫什麼,或是在if..else..的判斷裡面暫時還沒想到要寫什麼內容,如果就這樣空的不理它是不行的,這時候你就需要pass這個什麼事都不做的東西,像這樣:
1 2 | |
或是像這樣:
1 2 3 4 | |
這個pass的用途,就是只放個包包佔位置而已,其它什麼事都不做。也許你會覺得很不習慣,不過這個應該只有像在Python這種依賴縮排的程式語言才看得到的特色(?)吧。
呼叫/使用
1 2 3 4 5 6 | |
Python的method呼叫是透過小括號(),並且可以在裡面傳參數進去,不過Python的參數還滿自由的,不一定要照著順序傳進去,像是上面這段程式碼的第3行,只要知道變數名稱,用這種方式傳也是行得通的。
回傳值
每個method執行結束,可以使用return關鍵字來指定要回傳的值,如果沒有特別指定,則回傳值是None(相當於在別的程式語言的Null或Nil)。所以這段程式碼的的回傳值:
1 2 3 4 | |
因為calc_method最後並沒明確的指示要回傳什麼值,所以上面這段程式碼的執行結果,會得到在calc_method裡印出的結果10,以及用print把回傳值None給印出來。
Lambda? 黏巴達?
1 2 | |
lambda其實就是一種匿名(anonymous)的method,它不用像一般method使用def來事先定義好。
Method Decorator
decorator的意思簡單的說,就是用某個method把你原來的method給包起來,也就是你在執行內層method之前,會先執行外層的method。這個在Python或Django的程式碼還滿常見的,主要有兩種方式來實作:
第一種是使用method來做decorator:
1 2 3 4 5 6 7 8 9 10 11 | |
另一種是使用類別來做decorator:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
接下來,我們來看看在Python裡面的一些基本的資料型態.. 數字!