上一篇: 詳解函數傳回值和參數 | 手把手教你入門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))
原理

練習
使⽤遞歸實作斐波那契數列。1、1、2、3、5、8、13、21、34、……
遞歸的練習
匿名函數
⽤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,這樣可以接受定義函數的過程,⽐如寫⼀個簡單的腳本管理伺服器。
自定義一個匿名函數的使用場景
應用場合
函數作為參數傳遞
>>> 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中使⽤函數作為參數的内置函數和類: