10 自訂函數 - Hello Py: Python 程式設計
文章推薦指數: 80 %
Python 自訂函數的架構: def function_name(輸入1, 輸入2, 參數1, 參數2, ...): """ Docstrings """ # 主要的程式return 結果. 首先給函數取個名字( function_name ...
HelloPy:Python程式設計
1關於Pyradise
1.1講師陣容
1.1.1帽子哥
1.1.2喵貓老師
1.1.3小安老師
1.1.4有勁老師
2GoogleColab
2.1Python的開發環境
2.2為什麼選擇GoogleColab?
2.3GoogleColab設定
3快速上手
3.1互動式介面
3.2print函數
3.3求助
3.4註解
3.5使用=賦值
3.6Python3的內建函數
4基本資料類型
4.1整數與浮點數
4.2文字
4.2.1.format方法
4.2.2input函數
4.3布林
4.4邏輯運算符號
4.5資料類型的轉換
5流程控制
5.1兩個分支
5.2三個分支
6資料容器一
6.1list
6.1.1選出list中的元素
6.2tuple
6.2.1建立tuple
6.2.2tuple元素無法做更動
7For迴圈
7.1for迴圈結構
7.1.1不只是print
7.2ListComprehension
7.3enumerate函數
7.4zip函數
8資料容器二
8.1set
8.1.1建立set
8.1.2set無法選出裡面的元素
8.2dict
8.2.1建立dict
8.2.2利用鍵值選出dict中的元素
8.2.3dict與for迴圈
9while迴圈
9.1while迴圈結構
9.1.1兩種迴圈的運用時機
10自訂函數
10.1查詢函數的用法
10.2自訂函數
10.2.1函數說明文件Docstrings
10.2.2計算圓面積的函數
10.2.3計算圓周長的函數
10.2.4加入參數
10.2.5有多個輸出的函數
10.3變數範圍
10.4匿名函數(lambda函數)
10.5錯誤處理
Publishedwithbookdown
HelloPy:Python程式設計
10自訂函數
其實我們已經開始使用函數了,例如我們請Python回傳資料類型的type()或者產生數列list的range()都是函數。
函數的使用方法是在小括號中放輸入(input),然後呼叫函數得到輸出(output)。
10.1查詢函數的用法
如果我們不知道某個函數的用法,可以使用help()查詢,了解一個函數的輸入與它可以設定的參數,例如查詢range()函數就知道可以指定產出數列的起始值(start預設為0)、終止值(stop)與公差(step預設為1):
help(range)
10.2自訂函數
Python自訂函數的架構:
deffunction_name(輸入1,輸入2,參數1,參數2,...):
"""
Docstrings
"""
#主要的程式
return結果
首先給函數取個名字(function_name),接著在小括號中放進輸入(inputs)與參數(parameters),然後附上一段說明(Docstrings),在縮排內撰寫我們主要的程式,最後把輸出結果放在return後面。
10.2.1函數說明文件Docstrings
養成在自訂函數中加入Docstrings說明的好習慣,這有助於分享我們的自訂函數給其他人使用。
Docstrings可以區分為單行與多行:
deffunction_name(輸入,參數1,參數2,...):
"""單行的Docstring"""
#主要的程式
return結果
deffunction_name(輸入,參數1,參數2,...):
"""
多行的Docstrings
更多的說明內容
"""
#主要的程式
return結果
我們撰寫的Docstrings會在使用help()查詢函數用法的時候出現,例如我們的第一個自訂函數,它的作用是將輸入的數字平方之後回傳,我們就叫它my_squared()函數。
defmy_squared(x):
"""
將輸入的數字平方之後回傳
"""
returnx**2
help(my_squared)#查詢my_squared()函數
##Helponfunctionmy_squaredinmodule__main__:
##
##my_squared(x)
##將輸入的數字平方之後回傳
10.2.2計算圓面積的函數
熟能生巧,我們來練習自訂一個輸入半徑長度可以計算出圓面積的函數叫做circle_area()!
defcircle_area(r):
"""
輸入半徑長度可以計算出圓面積
"""
pi=3.14
returnpi*r**2
print(circle_area(3))
##28.26
10.2.3計算圓周長的函數
我們接著來練習自訂一個輸入半徑長度可以計算出圓周長的函數叫做circle_circum()!
defcircle_circum(r):
"""
輸入半徑長度可以計算出圓周長
"""
pi=3.14
return2*pi*r
print(circle_circum(3))
##18.84
10.2.4加入參數
我們把前面兩個自訂函數的功能整合起來到一個函數裡面,這個時候我們會正式納入參數(parameters)的觀念到這個自訂函數中,使用一個布林參數is_area來讓使用者在呼叫函數時決定要計算圓面積或者圓周長。
defcircle_calculator(r,is_area=True):
"""
輸入半徑長度可以計算出圓面積與圓周長
利用參數is_area決定要回傳圓面積或圓周長
預設回傳圓面積
"""
pi=3.14
ifis_area==True:
returnpi*r**2
else:
return2*pi*r
print(circle_calculator(3))
##28.26
print(circle_calculator(3,is_area=False))
##18.84
這裡我們設計is_area參數是有一個預設值True,假如自訂函數時沒有指定is_area參數的預設值並且呼叫函數時也沒有指定,就會出現錯誤訊息:
defcircle_calculator(r,is_area):#沒有指定預設值
"""
輸入半徑長度可以計算出圓面積與圓周長
利用參數is_area決定要回傳圓面積或圓周長
預設回傳圓面積
"""
pi=3.14
ifis_area==True:
returnpi*r**2
else:
return2*pi*r
print(circle_calculator(3))#沒有指定is_area參數的值
10.2.5有多個輸出的函數
我們再修正一下circle_calculator()這個自訂函數,讓它可以輸入半徑就一併輸出圓面積與圓周長。
這時我們只要在return敘述後面將兩個輸出用逗號,隔開就會儲存在一個tuple中回傳。
defcircle_calculator(r):
"""
輸入半徑長度可以計算出圓面積與圓周長
將圓面積與圓周長一起回傳
"""
pi=3.14
area=pi*r**2
circum=2*pi*r
returnarea,circum
print(circle_calculator(3))
##(28.26,18.84)
10.3變數範圍
在自訂函數時必須意識到變數範圍這個議題,程式中的變數開始被我們區分為區域變數(localvariables)與全域變數(globalvariables),在函數內我們能夠使用兩種類型的變數,但是在函數外,僅能使用全域變數。
用講的很抽象,我們還是動手定義自訂函數來釐清這個概念,用一個自訂函數my_squared()來演釋:
defmy_squared(x):
ans=x**2#ans是一個區域變數
returnans
print(ans)#在函數外沒有ans
假如我們將ans在函數外也進行指派:
ans=0#ans是一個全域變數
defmy_squared(x):
ans=x**2#ans是一個區域變數
returnans
print(my_squared(3))#區域變數ans的值是9
##9
print(ans)#全域變數ans的值是0
##0
10.4匿名函數(lambda函數)
除了正常的函數自訂結構,我們也可以使用一個稱作lambda函數的寫法,這樣的寫法不需要return敘述,我們來試著將my_squared()函數改寫成lambda函數:
my_squared=lambdax:x**2
print(my_squared(3))
lambda函數常與map()、filter()一起使用,像是利用filter()搭配lambda函數將1到10的偶數挑出來:
filter(lambdax:x%2==0,range(1,11))
或者是利用map()搭配lambda函數將1到10的每一個數字都平方:
map(lambdax:x**2,range(1,11))
10.5錯誤處理
自訂函數時如果能夠掌握某些特定錯誤,撰寫客製的錯誤訊息,可以讓使用自訂函數的使用者更快完成偵錯,我們可以使用try-except的語法結構進行錯誤處理。
我們修改原本計算平方數的my_squared()當使用者輸入文字時會回傳客製錯誤訊息:「請輸入數值。
」
defmy_squared(x):
"""
計算平方數且具有錯誤處理的函數
"""
try:
returnx**2
except:
return"請輸入數值。
"
print(my_squared("3"))
##請輸入數值。
除了我們在這個例子中遭遇的TypeError以外,也可以針對不同的錯誤類型設計客製錯誤訊息,接著我們再寫一個除法的函數divide()來示範,如果使用者輸入的資料類型錯誤(TypeError)就回傳「請輸入數值。
」假如使用者在除數指定了0(ZeroDivisionError)就回傳「除數不可以為零。
」
defdivide(x,y):
try:
returnx/y
exceptTypeError:
return"請輸入數值。
"
exceptZeroDivisionError:
return"除數不可以為零。
"
except:
return"其他的錯誤。
"
print(divide("9",3))
##請輸入數值。
print(divide(9,0))
##除數不可以為零。
延伸文章資訊
- 1自訂函式(User Definded Function) - iT 邦幫忙
0基礎也看得懂的程式設計-30天學會Python 系列第10 篇 ... 當某一段相同的程式碼在程式中重複出現,可以把這段程式碼寫成自訂函式,在把用到這段程式碼的地方替換成函 ...
- 2Python 初學第七講— 函式. 利用函式處理單一的特定功能
宣告:我們會利用 def 這個關鍵字來定義我們的function ,包含函式名稱以及這個函式所需的參數。 程式碼內容:我們需要這個函式做什麼,就在這裡寫什麼 ...
- 3【Python學堂】新手入門第七篇-Python函式 - 巨匠電腦
Python自訂函式分成兩個部份:定義、呼叫
- 4[Python教學]5個必知的Python Function觀念整理
首先Python函式的結構包含了def關鍵字、函式名稱、參數及實作內容,如下範例:. 函式名稱的命名習慣上會使用小寫字母,並且 ...
- 5python/day29/初學特訓(6)-自訂函數 - 小氣質- 痞客邦
一、 自訂函數的語法是def 函數名稱(變數名稱): 自訂函數的內容return 函數(不是 ... 要print出結果就是運用你原本自訂的函式名稱來叫出,也就是sum().