
函數 (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
沒有留言:
張貼留言
0.留言請選擇註冊帳號, Google 或 OpenID 均可
1.歡迎留言交流,但不歡迎垃圾留言及廣告留言
2.文章相關問題歡迎提出,請減少情緒性留言
3.非文章相關內容,請到 G+ 社群或 FB 社團提出
4.問作業之留言會被直接刪除
5.莫忘網路禮節
6.可使用部份HTML標記,如 <b> 、 <i> 、 <a>
7.站長保留刪除留言的權力