前面介紹過for迴圈能幫我們重複執行某些事情,但如果我們希望把某些一整套的流程整理包起來,日後有需要就可以呼叫,我們就要利用自定義函式來完成。在Python中,自定義函式的關鍵字為def,也就是define的縮寫。
def 一般函式
定義一個一般的函式,語法格式為:
Python
def 函式名稱(函式參數):
函式內部區域
.
.
.
return 函式返回值
#(記得函數內部區域要縮排)
舉例來說,我有這樣一個計算平均的程式:
Python
x =[1,2,3]
avg = sum(x)/3
print(f"average of {x} is {avg}")
x =[1,2,3,4]
avg = sum(x)/4
print(f"average of {x} is {avg}")
執行結果:
Python
average of [1, 2, 3] is 2.0
average of [1, 2, 3, 4] is 2.5
我們希望把計算平均值的部份函式化,避免一直重複,讓需要使用的時候呼叫即可而且更容易維護,會改成
Python
def avg(x):
return sum(x)/len(x)
x =[1,2,3]
print(f"average of {x} is {avg(x)}")
x =[1,2,3,4]
print(f"average of {x} is {avg(x)}")
其中avg是函式名稱,小括號內的x是函式參數,像這樣就是一個最基本的函式。搭配for迴圈再整理變成:
Python
def avg(x):
return sum(x)/len(x)
xs =[[1,2,3],[1,2,3,4]]
for x in xs:
print(f"average of {x} is {avg(x)}")
這裡再舉第二個稍微複雜一點的同時計算平均和變異數:
Python
def avg(X):
return sum(X)/len(X)
def var(X):
mean = avg(X)
var = 0
for x in X:
var += (x-mean)**2
return var/len(X)
X = [1, 2, 3, 4, 5]
print(f"data {X} `s mean is {avg(X)} , variance is {var(X)}")
這裡自定義一個計算變異數的函數var(),由於計算變異數需要先計算平均數,所以可以利用先前寫過的avg()直接呼叫即可,以上就是使用def來建立函數的介紹。
Lambda 函式
lambda 函式又稱匿名函式,省略掉函數名稱,可以把函式以「壓縮」的方式寫成一行就好,這樣能夠讓一些只負責簡單工作的函式不要看起來這麼冗長。它有幾個要求:
- 不會有函數名稱
- 只會寫成一行
- 只能提供一種運算
- 不寫return,函式結果會自動返回
lambda的語法格式為:
Python
lambda [函式參數1],[函式參數2]… : [函式內部的計算]
舉前面的例子:
Python
def avg(x):
return sum(x)/len(x)
以lambda的方式會寫成:
Python
avg=lambda x: sum(x)/len(x)
所以可以像這樣改寫
Python
avg=lambda x: sum(x)/len(x)
x =[1,2,3]
print(f"average of {x} is {avg(x)}")
x =[1,2,3,4]
print(f"average of {x} is {avg(x)}")
以上便是lambda函式的介紹,lambda的好處是當我們需要一個臨時的函數的時候可以不用分成那麼多行去撰寫。而何時使用lambda或是def 函式就必須看場合決定。
本文允許重製、散布、傳輸以及修改,但不得為商業目的之使用
使用時必須註明出處自:楊明翰 , 台灣人工智慧與資料科學研究室 https://aistudio.tw