今天來介紹一個程式語言中很重要的概念,自訂函式(function),如果要一口氣蓋出一棟房子,很難吧~ 但是如果用磚頭、鋼筋一部分一部分蓋上去相較之下就可行許多,程式語言也可以像這樣,先打造小的執行區塊,可以用來執行特定的功能,最後再將所有小區塊組合成一整個程式,這樣不但開發容易,未來維護也會比較方便。
假設說,今天我們要寫一個不同錯誤紀錄的功能,我們可以這樣寫:
if(ERROR1):
print("Time: ",now())
print("Error occurred.")
print("Code ",ERROR1)
exit()
elif(ERROR2):
print("Time: ",now())
print("Error occurred.")
print("Code ",ERROR2)
exit()
可是這樣如果有20種不同的錯誤,那豈不是會讓程式碼變得很長,而且好像都在做類似的事情,所以如果我們把這個報錯的功能寫在函式裡就會變成這樣:
def PrintError(ErrorNo):
print("Time: ",now())
print("Error occurred.")
print("Code ",ErrorNo)
exit()
if(ERROR1):
PrintError(ERROR1)
elif(ERROR2):
PrintError(ERROR2)
elif(ERROR3):
PrintError(ERROR3)
elif(ERROR4):
PrintError(ERROR4)
elif(ERROR5):
PrintError(ERROR5)
即使我們有五個錯誤判斷需要做,但整體而言就清爽許多,如果要修改的話也只需要修改 def PrintError()
裡面的區塊即可全部修改,那我們就來好好認識一下如何自訂函式吧!
函式就像數學中 y = f(x) 的 f(x),你給他 x 他會輸出 y,只不過呢今天他要輸出什麼 y 是由你自己定義的,例如說我想寫一個加法的函式,我就得給他加數與被加數,而函式應該要回應兩數和,例如這樣:
def add(num1, num2):
return num1 + num2
y = sum(1,2)
print(y)
#output 3
有看到嗎? 函式裡有一個 return
語句,意即我們想要回傳的值,後面的 y = sum(1,2)
為函式調用方法 (call function) 將1和2傳到 add(),並且將回傳值指派給變數 y。
也就是說,我們可以將類似的程式碼寫成一個 function,未來要使用的時候只要給他傳入值,他就會回應給我們想要的答案,同時也可以做到資料封裝,我們或許需要一個判斷是否為質數的功能,但我不會寫,該怎麼辦? 我可以調用別人寫好的函式,只要我們相信他回傳的是正確的,我們就可以無視函式內到底做了甚麼我們不懂的事,直接使用結果,注意!這必須要在確定函式回傳正確的情況下才可以,不然會導致垃圾進垃圾出,整個程式邏輯錯誤甚至崩潰。最好還是理解一下函式裡在幹嘛,這樣是最好且最安全的作法。
Ex 質數搜尋
import math
def IsPrimer(num):
if(num == 2):
return True
if(num % 2 == 0):
return False
for i in range(3,math.sqrt(num)+1):
if(num % i==0):
return False;
return True;
#使用時我們只需要調用,不需要了解 function 內部的運作原理
num = input("輸入欲檢查整數")
if(IsPrimer(num)):
print("是質數")
else:
print("非質數")
Function 的用法大致上就是這樣,這邊提供給讀者一些延伸閱讀,可以更增強讀者對函式使用的熟悉度,不過最好的方式還是親自練習寫寫看,保證多寫幾次就會了!當初我既受這麼學過來的~
https://www.w3schools.com/python/python_functions.asp
https://openhome.cc/Gossip/Python/DefStatement.html
https://www.geeksforgeeks.org/functions-in-python/