Python 入門指南

單元 8 - 函數

~~學習進度表~~

函數 (function) 是一種功能性的程式碼集合,可以將程式 (program) 分割成小部分,藉由呼叫 (call) 函數安排執行順序

def function_name():
  pass

定義函數使用關鍵字 (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() 並且印出結果

def big(a, b):
  if a > b:
    return a
  else:
    return b

print()
print(big(33, 22))
print(big("John""Mary"))
print()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:big_demo.py
# 功能:示範 Python 中的函數
# 作者:張凱慶 */

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

print(big(33, 22))

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

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

執行結果如下

$ python big_demo.py
 
33
Mary
 
$

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

def print_newline():
  print()

def print_something(a):
  print(a)

def return_something(a):
  return a

print_newline()
s = "There is no spoon."
print_something(return_something(s))
print_newline()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:print_demo.py
# 功能:示範 Python 中的函數
# 作者:張凱慶 */

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

def print_newline():
  print()

print_something() 則是印出參數 a

def print_something(a):
  print(a)

return_something() 則是回傳參數

def return_something(a):
  return a

執行結果如下

$ python print_demo.py
 
There is no spoon.
 
$

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

中英文術語對照
呼叫call
字元character
類別class
關鍵字keyword
參數parameter
參數列parameter list
程式program
回傳值return value
字串string
重點整理
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.py ,改成接受使用者輸入的版本。
7. 寫一個程式 exercise0807.py ,裡頭設計一個函數 fibonacci() ,用以計算費氏數列。
8. 承上題,另寫一個程式 exercise0808.py ,改成接受使用者輸入的版本。

相關教學影片

上一頁 單元 7 - 迴圈
回 Python 入門指南首頁
下一頁 單元 9 - 類別
回 Python 教材首頁
回程式語言教材首頁