# 第十一天 Functions函數 > [color=#40f1ef][name=LHB阿好伯, 2020/12/18][:earth_africa:](https://www.facebook.com/LHB0222/) ###### tags: `Python_30` `R & python` ![](https://i.imgur.com/BiRMn8Q.jpg) [TOC] 🌟 # 自訂函數Defining a Function 函數是指在執行特定任務的可重複性程式碼 為了定義一個函數 R使用 ==function()== 賦值給函數名稱 可以設定print()輸出或return()控制回傳資料 :::danger ```r= #R 程式碼說明 函數名稱 <- function(參數1, 參數2, ...){ 程式碼... 程式碼... return(回傳的資料) } ``` ::: ```r= # R code greetings <- function(name){ message <- paste0(name, ', welcome to R for Everyone!') return(message) } print(greetings('Asabeneh')) ``` :::success [1] "Asabeneh, welcome to R for Everyone!" ::: ```r= # R code #設計一個計算圓面積的函數 area_of_circle <- function(r){ PI = 3.14 area = PI * r ** 2 return(area) #可以不用寫 } print(area_of_circle(10)) ``` :::success [1] 314 ::: Python使用 ==`def`== 關鍵字建立函數 須設定print()輸出或return回傳資料 不然執行自訂函數是不會有輸出的 :::danger ```python= def 函數名稱(參數1, 參數2, ...): 程式碼... 程式碼... return 回傳的資料 ``` ::: 範例: ```python= # Python code def greetings (name): message = name + ', welcome to Python for Everyone!' return message print(greetings('Asabeneh')) ``` ```python=+ # Python code def greetings (name): message = name + ', welcome to Python for Everyone!' print(message) greetings('Asabeneh') ``` :::success Asabeneh, welcome to Python for Everyone! ::: ```python= # Python code #設計一個計算圓面積的函數 def area_of_circle (r): PI = 3.14 area = PI * r ** 2 return area print(area_of_circle(10)) ``` :::success 314.0 ::: ## 使用reture回傳結果的應用 大部分時候會建議大家使用reture回傳結果 因為在函數中使用一些判斷句時會有多個可能的解果 這時候就可以依照不同結果回傳資料 例如下面設計一個公式判斷輸入的數字是否為偶數 ```r= # R code is_even <- function(n){ if(n %% 2 == 0){ #計算餘數 print('even') return(TRUE) } else { return(FALSE) } } print(is_even(10)) print(is_even(7)) ``` :::success [1] "even" [1] TRUE [1] FALS ::: ```python= # Python code def is_even (n): if n % 2 == 0: print('even') return True # return會停止執行下一步的程式碼,類似於break return False print(is_even(10)) # True print(is_even(7)) # False ``` :::success even True False ::: # 添加默認參數 有時在使用函數時如果未傳遞參數,則將使用其默認參數值 可以保留後續函數方便性與使用的彈性 :::danger ```r= #R 程式碼說明 函數名稱 <- function(參數1 = 預設值, 參數2 = 預設值, ...){ 程式碼... 程式碼... return(回傳的資料) } ``` ```python= #Python 程式碼說明 def 函數名稱(參數1 = 預設值, 參數2 = 預設值, ...): 程式碼... 程式碼... return 回傳的資料 ``` ::: ```r= # R code greetings <- function(name = 'Peter'){ message = paste0(name, ', welcome to R for Everyone!') return(message) } print(greetings()) print(greetings('Asabeneh')) ``` :::success [1] "Peter, welcome to R for Everyone!" [1] "Asabeneh, welcome to R for Everyone!" ::: ```python= # Python code def greetings (name = 'Peter'): message = name + ', welcome to Python for Everyone!' return message print(greetings()) print(greetings('Asabeneh')) ``` :::success Peter, welcome to Python for Everyone! Asabeneh, welcome to Python for Everyone ::: ## 任意數量的參數輸入 如果不知道輸入給函數的參數數量 R可以使用三個點 ==...== 作為指定其他數量的參數輸入 :::danger ```r= #R 程式碼說明 函數名稱 <- function(參數1, ...){ 程式碼(...) 程式碼(...) return(回傳的資料) } ``` ::: ```r= # R code generate_groups <- function(team, ...){ print(team) for( i in list(...)){ print(i) } } generate_groups('Team-1','Asabeneh','Brook','David','Eyob') ``` :::success [1] "Team-1" [1] "Asabeneh" [1] "Brook" [1] "David" [1] "Eyob" ::: Python可以通過在參數名稱前添加一米字號 ==*== 來創建一個可以接收任意數量參數的函數 :::danger ```python= #Python 程式碼說明 def 函數名稱(*參數1, 參數2 = 預設值, ...): 程式碼... 程式碼... return 回傳的資料 ``` ::: ```python= # Python code def generate_groups (team,*args): print(team) for i in args: print(i) generate_groups('Team-1','Asabeneh','Brook','David','Eyob') ``` :::success Team-1 Asabeneh Brook David Eyob ::: ## 函數作為另一個函數的參數 函數可以算是一個物件 所以可以將整個函數作為其他函數的參數 我們直接看範例 ```r= # R code square_number <- function(n){ return(n * n) } do_something <- function(f, x){ return(f(x)) } print(do_something(square_number, 3)) ``` :::success [1] 9 ::: ```python= # Python code def square_number (n): return n * n def do_something(f, x): return f(x) print(do_something(square_number, 3)) ``` :::success 9 ::: # Lambda-無名函數 Lambda函數是一個沒有名稱的小型無名函數 它可以接受任意數量的參數 但只能有一個表達式 可以再一個函數中編寫一個無名函數 ## 基本寫法 :::success ```python= lambda 參數1, 參數2, 參數3, ... : 程式碼 ``` ::: ```python= # Python code add_two_nums = lambda a, b: a + b print(add_two_nums(2,3)) ``` :::success 5 ::: ## 嵌套於別的函數中 ```python= # Python code def power(x): return lambda n : x ** n cube = power(2)(3) print(cube) ``` :::success 8 ::: 🌟全文可以至下方連結觀看或是補充 https://hackmd.io/@LHB-0222/30_Days_of_Python-11 全文分享至 https://www.facebook.com/LHB0222/ https://www.instagram.com/ahb0222/ 有疑問想討論的都歡迎於下方留言 喜歡的幫我分享給所有的朋友 \o/ 有所錯誤歡迎指教 # [:page_with_curl: 全部文章列表](https://hackmd.io/@LHB-0222/AllWritings) ![](https://i.imgur.com/47HlvGH.png)