10 自訂函數 - Hello Py: Python 程式設計

文章推薦指數: 80 %
投票人數:10人

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)) ##除數不可以為零。



請為這篇文章評分?