# Python 函式 ###### tags: `python` 引述: 函式是程式碼包裝在一個區塊中,方便隨時呼叫使用 要先定義一個程式區塊,然後呼叫函式 [參考課程-1](https://www.youtube.com/watch?v=7qKFvUVpQXg&list=PL-g0fdC5RMboYEyt6QS2iLb_1m7QcgfHk&index=9) [參考課程-2](https://www.youtube.com/watch?v=OOJmhezLd4o&list=PL-g0fdC5RMboYEyt6QS2iLb_1m7QcgfHk&index=10) ## 定義函式: >def 函式名稱(參數名稱): >>函式內部程式碼 參數可有可無 範例1 ```python= def sayHello(): print("hello") ``` 範例2 ```python= #n1,n2為參數,呼叫時可以給定值 def add(n1,n2): result=n1+n2 print(result) ``` ## 呼叫函式 >函式名稱(參數資料) 範例1 ```python= def syaHello(): print("hello") sayHello() ``` 範例2 ```python= #定義 def say(msg): print(msg) #呼叫 say("Hello python") ``` ## 回傳值 >def 函式名稱(參數名稱): >>函式內部程式碼 >>return #結束函式,回傳資料 or none 資料:布林、int等 ```python= def say(msg): print(msg) return value = say("hello function") print(value)#印出none ``` 會回傳什麼,取決於return後的東西,跟上方程式碼無關 e.g. return "hello"則function回傳的值就為hello, 回傳值代function結果,把值從function中帶出來 ```python= def add(n1,n2): result=n1+n2 return result value = add(3,4,) print(value)#印出7 ``` 沒有回傳值或沒有寫,則預設為none,例如: ```python= def multiply(n1,n2): print(n1*n2) value = multiply(3,4) print(value) ``` >12 >None **return有用的功能是把值從function中帶出來,外部可以繼續操作資料** ## 程式包裝(類似的工作重複執行) ```python= #計算1+到使用者輸入的數字 def calculate(n): sum=0; for i in range(1,n+1): sum = sum+i; return sum n = int(input('Enter a number(enter negative number to stop calculate): ')); while(n>0): print(calculate(n)) n = int(input('Enter a number(enter negative number to stop calculate): ')); ``` ## 參數預設資料 範例1 ```python= #參數msg預設為"hello" def say(msg="hello"): print(msg) say("World") say()#印出預設hello ``` 範例2: ```python= def power(base,exp): print(base**exp) power(3,2) power(4) ``` >Typeerror 因為沒有第二個參數 解決:如果把function改成 power(base,exp=0) 則不會error,而是1 **當沒有給需要的參數時,則使用預設資料** ## 呼叫函式,以參數名稱對應資料,不論順序 >def 函式名稱(名稱1,名稱2): >>函式內部程式碼 >#呼叫函式,以參數名稱對應資料 >函式名稱(名稱2=3,名稱1=5) 範例: ```python= def divide(n1,n2): result = n1/n2; print(result) divide(2,4);#印出0.5 divide(n2=2,n1=4)#印出2 ``` ## 無限、不定數量的參數 用途:不確定會有多少參數時使用 >def 函式名稱(*無限參數): >>無限參數以Tuple資料型態處理 >>函式內部程式碼 >#呼叫函式,可傳入無限數量的參數 >函式名稱(資料1,資料2,資料3....) 範例1: ```python= #函式接受無限參數 def say(*msgs): #以tuple方式處理 for msg in msgs: print(msg) #call function 傳入參數 say("Hello","World","python","good") ``` 範例2: ```python= #算輸入數字的平均數,不限定多少數字 def avg(*ns): sum=0 for n in ns: sum+=n print(sum/len(ns)) avg(3,4) avg(3,5,10) avg(1,4,-1,-8) ```