到了今天,只要用用前日所學,想必各位都能寫出許多程式了,我們凡是先求有在求好,現在我們能寫出的程式屬於流水帳,意思就是毫無結構從上寫到下的程式,這種寫法一旦到大一點的程式就會遭遇瓶頸了,因此我們必須使用結構化、模組化的開發方式,今天所要認識的叫做副程式,也稱為函數、函式,其關鍵心法為:將程式包裝成一個區塊,需要時再呼叫出來使用,讓我們來揭露副程式的奧秘吧~
先建構副程式,才能使用副程式
沒錯,在使用副程式之前,必須要先建構,python建構副程式的方式非常簡單,它沒有C、JAVA宣告副程式時所需要的一堆關鍵字, python只需要使用def關鍵字即可宣告副程式,用法如下:
#定義函數
def 函數名稱():
函數內部程式...
是不是非常簡單呢?
現在建構完了,我們要來使用它
#呼叫函數
函數名稱()
我們實際操作一次看看
# 定義副程式
def say_hi():
print("Hi")
# 使用副程式
say_hi()
# 印出 "Hi"
令一個基本操作,帶參數呼叫,使用方法如下
#定義函數
def 函數名稱(參數名稱1, 參數名稱2,.....):
函數內部程式
#呼叫函數
函數名稱(參數1, 參數2,.....)
程式碼如下
# 定義副程式
def say(word):
print(word + "! friend")
# 使用副程式
say("Hi")
# 印出 "Hi! friend"
** return 傳出 回傳值,並強制結束函數**
回傳值就是副程式執行吐出的結果,我們可以在副程式中的內容使用return後面接要回傳的結果,並且把回傳的結果用一個變數接住,用法如下
#定義函數
def 函數名稱(參數名稱1, 參數名稱2,.....):
函數內部程式
return 回傳值
#呼叫函數
變數 = 函數名稱(參數1, 參數2,.....)
下面是輸入一個數字的參數,副程式會回傳該數字的階乘(3!、5!、等...)副程式
# 定義副程式
def factorial(num):
ans = num
num -= 1
while num > 0 :
ans *= num
num -= 1
return ans
# 使用副程式
a = say(6)
print(a)
# 印出 720
我們在定義副程式的時候,可以先給參數預設值,這樣當我呼叫復生是的時候,要是沒有下參數,副程式就會自己使用內建的參數預設值,用法如下
# 定義副程式
def dog(name = "小黑"):
print(name)
# 使用副程式
dog() #印出 小黑
dog("小白") #印出 小白
我們在定義副程式時可以宣告多個參數,呼叫時也必須依照參數的先後順序賦值,範例如下
# 定義副程式
def dinner(time, food):
print("在" + time + ",吃" + food)
# 使用副程式
dinner("八點", "達美樂")
#印出 "在八點,吃達美樂"
如果沒有按照順序下參數,可能會出現以下不合邏輯的錯誤
# 定義副程式
def dinner(time, food):
print("在" + time + ",吃" + food)
# 使用副程式
dinner("達美樂", "八點")
#印出 "在達美樂,吃八點"
我們可以看到上面的兩個參數下的順序反了,所以出現了我們預期以外的錯誤,如果非要不按照順序下參數,這時候要使用下面的技巧
在呼叫副程式時,指定參數的內容,操作如下
# 定義副程式
def dinner(time, food):
print("在" + time + ",吃" + food)
# 使用副程式
dinner(food = "達美樂", time = "八點")
#印出 "在達美樂,吃八點"
C跟Java都有個主程式,而python是不需要主程式就能執行的,但主程式能幫助我們標記程式的進入點,進而達成模組化開發,沒有主程式的結果就是各行指令都是分散的,可能第一行是執行一條指令,接著第2、3...都是在定義副程式,而下一行要執行的指令卻在10多行,這樣會造成程式難以閱讀,因此這裡要來介紹主程式
if __name__ == "__main__":
print("hello world")
if __name__ == "__main__":
這個區塊的內容就是主程式,也就是程式的進入點,下面是範例
def say(word):
return "Hey!" + word + "!"
if __name__ == "__main__":
print(say("hello world"))
# 印出 "Hey!hello world!"
以上就是副程式的基本操作,學會這個之後就能模組化的開發程式囉,模組化開發是所有程式開發必定使用到的技巧,不但可以使程式可維護性更高,彈性更大,也比較具有可讀性,明天將會介紹更進階的模組化開發方式