Photo by Susan Holt Simpson on Unsplash
在寫程式碼時有一個非常重要的觀念是DRY(Don’t
Repeat Yourself),意思是避免同樣的程式碼重複出現在很多個地方,除了可讀性很低外,也不易維護。所以要適當的進行封裝,來達到程式碼的重用性(Reusable)。今天要來教大家如何建構自己的 Python函式(Function),就是能夠讓你的程式碼被重複的使用(Reusable),並且提高維護性及可讀性。其中有五個必須要知道的重要觀念,包含了:
- 函式(Function)結構
- 函式(Function)參數
- 函式(Function) *args、**kwargs運算子
- 函式(Function)種類
- 函式(Function)變數範圍(Scope)
一、函式(Function)結構
首先Python函式的結構包含了def關鍵字、函式名稱、參數及實作內容,如下範例:
函式名稱的命名習慣上會使用小寫字母,並且以底線來分隔單字。參數用來接收外部資料,而實作的內容則是這個函式所要執行的任務,需注意縮排。接下來就針對函式的各個部分進行詳細的說明。
二、函式(Function)參數
參數簡單來說就是接收外部所傳來的資料,進而執行相關的邏輯運算。參數個數取決於函式內部運算時所需的資料個數,所以在一般情況下,呼叫函式時一定要傳入相對的參數個數資料,否則就會出現例外錯誤,如下範例:
函式的參數,又可分為:
- 關鍵字參數(Keyword Argument):呼叫函式時,在傳入參數值的前面加上函式所定義的參數名稱,如下範例。除了提高可讀性外,也可將此種參數打包成字典(Dictionary)資料型態,在等一下的xargs、xxargs運算子部分會來進行說明。
- 預設值參數(Default Argument):在函式定義的參數中,將可以選擇性傳入的參數設定一個預設值,當來源端有傳入該資料時,使用來源端的資料,沒有傳入時,則依照設定的預設值來進行運算,如下範例:
範例中沒有傳入日期參數資料,所以函式使用預設值(2019/12/21)來進行運算。我們再來看一個範例:
當來源端有傳入日期參數資料(2019/10/10),函式就會使用其值來進行運算。
PS.特別注意,必要參數(Required Argument)一定要放在預設值參數(Optional Argument)的前面。
三、函式(Function) *args、**kwargs運算子
當我們要傳入大量的參數時,在函式上定義過多的參數名稱會讓程式碼的可讀性降低,這時候就可以使用 * 符號來將傳入參數進行打包,如下範例:
在上面的範例中可以看到,要打包成字典(Dictionary)資料型態,在呼叫函式時,一定要使用關鍵字參數(Keyword
Argument),如此才能將關鍵字參數的鍵(Key)對應到字典(Dictionary)的鍵(Key),指派的值(Value)對應到字典(Dictionary)的值(Value)。
四、函式(Function)種類
- 有回傳值:在函式完成運算後,會在最後加上 return 關鍵字將結果回傳給來源端,進而做其它的運用,如下範例:
- 無回傳值:在函式運算的最後,沒有加上 return 關鍵字,單純執行完某一項任務,如下範例:
基本上,Python的函式都有回傳值,為什麼會這樣說呢?當我們用一個變數來接無回傳值函式的結果時,從執行結果可以看到Python隱含回傳了一個None給我們,如下範例:
因為在函式中沒有使用 return 關鍵字回傳結果,所以在來源端用一個變數來接回傳值時,會得到None(也就是此函式無回傳值的意思)。
五、函式(Function)變數範圍(Scope)
五、函式(Function)變數範圍(Scope)
在任何程式語言中,變數都有它的有效範圍,也就是變數所在的程式碼位置,會影響到是否可以進行存取,可以分為:
- 區域變數(Local Variable):在函式中所定義的變數就是區域變數。只有在函式的範圍中都可以進行存取,而函式以外的其它地方,則無法進行存取,如下範例:
範例中的 x 變數屬於區域變數,所以只有在函式中才能進行存取,函式以外的地方進行存取時,就會出現NameError的例外錯誤。
- 全域變數(Global Variable):只要在同一個Python檔案中,皆可進行存取,如下範例:
由於 x 為全域變數,只要在同一份檔案中皆能存取,所以執行結果為100。
如果想要透過函式來修改全域變數的值,則可以使用 global 關鍵字,如下範例:
PS.在這邊呼籲大家,非必要避免在函式中修改全域變數的值,因為永遠不會知道程式的其他地方有沒有使用了這個全域變數來進行運算,而在函式中修改了它的值後,很容易導致程式的副作用(Side
Effect)或錯誤(Bug)。
六、小結
以上就是Python函式(Function)的五個必須要知道的觀念,趕快來建構自己的函式,提高程式碼的維護性吧。在練習的過程中若有碰到問題或說明不清楚的地方,歡迎留言與我分享!
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊
你可能感興趣的文章
寫的超清楚,感謝!
回覆刪除