天天看點

遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四

上一篇: 詳解函數傳回值和參數 | 手把手教你入門Python之四十三 下一篇: 詳解高階函數和閉包 | 手把手教你入門Python之四十五 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。

遞歸函數

<1>什麼是遞歸函數

通過前⾯的學習知道⼀個函數可以調⽤其他函數。

如果⼀個函數在内部不調⽤其它的函數,⽽是⾃⼰本身的話,這個函數就是遞歸函數。

<2>遞歸函數的作⽤

舉個例⼦,我們來計算階乘 n! = 1 2 3 ... n

解決辦法1:使⽤循環來完成

def cal(num):
 result,i = 1,1
 while i <= num:
 result *= i
 i+= 1
 return result
print(cal(3))           

看階乘的規律

1! = 1
2! = 2 × 1 = 2 × 1!
3! = 3 × 2 × 1 = 3 × 2!
4! = 4 × 3 × 2 × 1 = 4 × 3!
...
n! = n × (n-1)!
           

解決辦法2:使⽤遞歸來實作

def factorial(num):
 result = 1
 if num == 1:
 return 1
 result = num * factorial(num -1)
 return result
print(cal(3))           

原理

遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四

練習

使⽤遞歸實作斐波那契數列。1、1、2、3、5、8、13、21、34、……

遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四

遞歸的練習

遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四

匿名函數

⽤lambda關鍵詞能建立⼩型匿名函數。這種函數得名于省略了⽤def聲明函數的标準步驟。

lambda函數的文法隻包含⼀個語句,如下:

lambda 參數清單: 運算表達式           

如下執行個體:

sum = lambda arg1, arg2: arg1 + arg2
# 調⽤sum函數
print("Value of total : %d" % sum( 10, 20 ))
print("Value of total : %d" % sum( 20, 20 ))           

以上執行個體輸出結果:

Value of total : 30
Value of total : 40           

Lambda函數能接收任何數量的參數但隻能傳回⼀個表達式的值

匿名函數可以執⾏任意表達式(甚⾄print函數),但是⼀般認為表達式應該有⼀個計算結果供傳回使⽤。

python在編寫⼀些執⾏腳本的時候可以使⽤lambda,這樣可以接受定義函數的過程,⽐如寫⼀個簡單的腳本管理伺服器。

遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四

自定義一個匿名函數的使用場景

遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四

應用場合

函數作為參數傳遞

>>> def fun(a, b, opt):
... print("a = " % a)
... print("b = " % b)
... print("result =" % opt(a, b))
...
>>> add = lambda x,y:x+y
>>> fun(1, 2, add) # 把 add 作為實參傳遞
a = 1
b = 2
result = 3           

練習:

有⼀個清單

students = [
 {'name': 'zhangsan', 'age': 18, 'score': 92},
 {'name': 'lisi', 'age': 20, 'score': 90},
 {'name': 'wangwu', 'age': 19, 'score': 95},
 {'name': 'jerry', 'age': 21, 'score': 98},
 {'name': 'chris', 'age': 17, 'score': 100},
]           

要求,對上述清單⾥的資料按照score進⾏升序排序。

Sort方法的使用

遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四

Python中使⽤函數作為參數的内置函數和類:

遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四

Filter&map&reduce方法

遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
map的使用
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
reduce的使用
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四

内置函數總結

遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四
遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四