你應該有用過自動販賣機吧!就是把錢丟進去,就可以有飲料掉出來的那種機器。而我們今天要研究的函式,就跟自動販賣機非常相似。
回顧一下我們在第六章做的計程車範例:
# 這行是設定變數
distance_km = 2
# 用變數繼續進行後續的計算
distance_m = distance_km * 1000
extra_distance = distance_m - 1250
price = 85 + (extra_distance // 200) * 5
然而當我們想要計算不同公里數的價格時,就需要不斷的去修改最上面那一行的數值。但是函式可以幫我們把下面的計算過程包裝起來,方便我們重覆使用:
# calc_price 這個函式接受一個輸入資料,我們稱之為「參數」
def calc_price(distance_km):
distance_m = distance_km * 1000
extra_distance = distance_m - 1250
# 用 return 將最後的結果送出,不需要像上面用 price 變數接住
return 85 + (extra_distance // 200) * 5
然後我們就可以重覆的利用這個函式了
# 操作函式時,在函式的名字後面加 `()` 表示呼叫,並在括號中放進我們要給他的輸入,
# 呼叫函式時傳進去的資料,有個特定的稱呼叫「引數」。不過也有人會一樣叫它們「參數」
# 前面用變數指派,接住回傳的結果
# 像這樣可以計算 2 公里的價格
price_a = calc_price(2)
# 計算 5 公里的價格
price_b = calc_price(5)
# 計算 15 公里的價格
price_c = calc_price(15)
上面的範例是只接收一個參數的函式。而函式也可以有零參數或是多個參數的版本
# 接收兩個參數的函式
def sum(a, b):
return a + b
# 呼叫函式
sum(1, 2)
#=> 3
# 傳錯引數數量會出錯
sum(1)
#>>>
# Traceback (most recent call last):
# File "<python-input-1>", line 1, in <module>
# sum(1)
# ~~~^^^
#TypeError: sum() missing 1 required positional argument: 'b'
# 接收零個參數的函式:
def ten():
return 10
除了固定個數參數的函式之外,還有預設參數的函式:如果少傳參數就會用預設值。以及不固定參數的函式。試著跟 AI 對話問問看吧!
我想了解 Python 的函式宣告中,各種參數的用法,例如「預設參數」、「不固定長度參數」、「具名參數」的宣告方式、範例以及用途。
函式裡會用 return
關鍵字來回傳計算完成的資料。要記得函式只要運行到 return
這個字的時候,就會立刻終止函式,並回傳後面的資料。
當然函式也可以沒有回傳值,大多的狀況,會用在單純的列印一段字串。跟 AI 討論看看吧!
我想了解 Python 的函式中,什麼情況會用到無回傳值的函式?
函式在概念上很簡單,不過他在程式裡有非常多厲害的用法。在之後進階的章節裡,我們會說明更多函式的概念與使用技巧喔!
什麼是函式?
A) 一段可以重複使用的程式碼,有名字可以呼叫
B) 一種特殊的變數
C) 一種迴圈
D) 一種資料型別
函式的「參數」是什麼?
A) 函式的名稱
B) 函式執行後的結果
C) 傳遞給函式的資料,讓函式可以根據不同輸入做處理
D) 函式內部的變數
使用函式的最大好處是什麼?(可複選)
A) 程式碼可以重複使用,不用一直複製貼上
B) 讓程式更有組織,容易閱讀
C) 程式執行速度會變快
D) 可以把複雜的任務分成小部分處理
以下程式碼有什麼問題?
def greet_student(name):
print(f"你好,{name}!")
greet_student()
A) 函式名稱不能有底線
B) 呼叫函式時沒有給參數
C) print 的語法錯誤
D) 沒有 return
multiply(a, b)
,接收兩個數字參數,回傳它們相乘的結果。並呼叫這個函式計算 6 × 7,把結果存到變數 answer
中並印出來。