函數 (function) 是一種功能性的程式碼集合,可以將程式 (program) 分割成小部分,藉由呼叫 (call) 函數安排執行順序
定義函數使用關鍵字 (keyword) def ,其後空一格接函數名稱與小括弧,小括弧用來放參數列 (parameter list) ,函數可以有參數 (parameter) 也可以沒有參數,沒有參數的函數的小括弧留空,另外函數可用 return 設定回傳值 (return value) ,沒有回傳值的函數也就不需要 return 。舉一例如下
def big(a, b): | |
if a > b: | |
return a | |
else: | |
return b |
big() 函數回傳兩個參數中的較大值,參數名稱及數量則是依自己定義放在參數列,這裡的參數用了 a 與 b ,另外此例用了兩個 return ,這裡 return 就是函數結束執行,將控制權交還原本呼叫函數的地方。
我們將 big() 寫成一個完整範例,加上呼叫 big() 並且印出結果
001 | def big(a, b): |
002 | if a > b: |
003 | return a |
004 | else: |
005 | return b |
006 | |
007 | print() |
008 | print(big(33, 22)) |
009 | print(big("John", "Mary")) |
010 | print() |
011 | |
012 | # 檔名: big_demo.py |
013 | # 作者: Kaiching Chang |
014 | # 時間: July, 2014 |
此例先比較 33 與 22 的大小,然後印出哪一個比較大
008 | print(big(33, 22)) |
接下來則是比較 "John" 與 "Mary" 的大小,字串 (string) 比較是先比較第一個字元 (character) ,按字母順序,順序越後面的值越大
009 | print(big("John", "Mary")) |
執行結果如下
函數常見的運用為重複性質的工作,另舉一例如下
001 | def p1(): |
002 | print() |
003 | |
004 | def p2(a): |
005 | print(a) |
006 | |
007 | def r1(a): |
008 | return a |
009 | |
010 | p1() |
011 | p2(r1("There is no spoon.")) |
012 | p1() |
013 | |
014 | # 檔名: print_demo.py |
015 | # 作者: Kaiching Chang |
016 | # 時間: July, 2014 |
這裡總共定義了三個函數, p1() 就是簡單的印出新行
001 | def p1(): |
002 | print() |
p2() 則是印出參數 a
004 | def p2(a): |
005 | print(a) |
r1() 則是回傳參數值
007 | def r1(a): |
008 | return a |
執行結果如下
學會函數後,我們接下來看看怎麼設計類別 (class) 囉!
中英文術語對照
程式 | program |
呼叫 | call |
關鍵字 | keyword |
參數列 | parameter list |
參數 | parameter |
回傳值 | return value |
字串 | string |
字元 | character |
類別 | class |
重點整理
- 函數是一種功能性的程式碼集合,可以有參數及回傳值,參數不限個數,回傳值最多只能有一個。
- return 陳述將執行控制權還給呼叫函數的地方。
問題與討論
- 為什麼函數要有參數?若在函數中改變參數的值,原本的參數會被改變嗎?
- 如果要在函數中改變參數的值該如何處理?
- 為什麼函數只能有一個回傳值?如果有需要回傳多個數值該如何處理?
練習
- 寫一個程式 exercise0801.py ,裡頭設計一個函數 sum() ,用以計算兩個整數的和。
- 承上題,另寫一個程式 exercise0802.py ,改成接受使用者輸入的版本。
- 寫一個程式 exercise0803.py ,裡頭設計一個函數 sum() ,只用一個整數參數 p ,結果回傳 1 到 p 之間所有正整數的和。
- 承上題,另寫一個程式 exercise0804.py ,改成接受使用者輸入的版本。
- 寫一個程式 exercise0805.py ,裡頭設計一個函數 factorial() ,用以計算階層值。
- 承上題,另寫一個程式 exercise0806.cpp ,改成接受使用者輸入的版本。
- 寫一個程式 exercise0807.py ,裡頭設計一個函數 fibonacci() ,用以計算費氏數列。
- 承上題,另寫一個程式 exercise0808.cpp ,改成接受使用者輸入的版本。
the end
沒有留言:
張貼留言