Python 入門指南 V2.00 - 單元 8 - 函數




函數 (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() 函數回傳兩個參數中的較大值,參數名稱及數量則是依自己定義放在參數列,這裡的參數用了 ab ,另外此例用了兩個 return ,這裡 return 就是函數結束執行,將控制權交還原本呼叫函數的地方。


我們將 big() 寫成一個完整範例,加上呼叫 big() 並且印出結果


001def big(a, b):
002   if a > b:
003      return a
004   else:
005      return b
006  
007print()
008print(big(33, 22))
009print(big("John""Mary"))
010print()
011 
012# 檔名: big_demo.py 
013# 作者: Kaiching Chang 
014# 時間: July, 2014

此例先比較 3322 的大小,然後印出哪一個比較大


008print(big(33, 22))

接下來則是比較 "John""Mary" 的大小,字串 (string) 比較是先比較第一個字元 (character) ,按字母順序,順序越後面的值越大


009print(big("John""Mary"))

執行結果如下



函數常見的運用為重複性質的工作,另舉一例如下


001def p1():
002   print()
003  
004def p2(a):
005   print(a)
006  
007def r1(a):
008   return a
009  
010p1()
011p2(r1("There is no spoon."))
012p1()
013 
014# 檔名: print_demo.py 
015# 作者: Kaiching Chang 
016# 時間: July, 2014

這裡總共定義了三個函數, p1() 就是簡單的印出新行


001def p1():
002   print()

p2() 則是印出參數 a


004def p2(a):
005   print(a)

r1() 則是回傳參數值


007def r1(a):
008   return a

執行結果如下



學會函數後,我們接下來看看怎麼設計類別 (class) 囉!


中英文術語對照


程式program
呼叫call
關鍵字keyword
參數列parameter list
參數parameter
回傳值return value
字串string
字元character
類別class

重點整理


  1. 函數是一種功能性的程式碼集合,可以有參數及回傳值,參數不限個數,回傳值最多只能有一個。
  2. return 陳述將執行控制權還給呼叫函數的地方。


問題與討論


  1. 為什麼函數要有參數?若在函數中改變參數的值,原本的參數會被改變嗎?
  2. 如果要在函數中改變參數的值該如何處理?
  3. 為什麼函數只能有一個回傳值?如果有需要回傳多個數值該如何處理?

練習


  1. 寫一個程式 exercise0801.py ,裡頭設計一個函數 sum() ,用以計算兩個整數的和。
  2. 承上題,另寫一個程式 exercise0802.py ,改成接受使用者輸入的版本。
  3. 寫一個程式 exercise0803.py ,裡頭設計一個函數 sum() ,只用一個整數參數 p ,結果回傳 1p 之間所有正整數的和。
  4. 承上題,另寫一個程式 exercise0804.py ,改成接受使用者輸入的版本。
  5. 寫一個程式 exercise0805.py ,裡頭設計一個函數 factorial() ,用以計算階層值。
  6. 承上題,另寫一個程式 exercise0806.cpp ,改成接受使用者輸入的版本。
  7. 寫一個程式 exercise0807.py ,裡頭設計一個函數 fibonacci() ,用以計算費氏數列。
  8. 承上題,另寫一個程式 exercise0808.cpp ,改成接受使用者輸入的版本。

the end

沒有留言: