一、遞歸:函數內部調用自己,必須要有出口
二、lambda表達式:
如果一個函數有一個返回值,並且只有一句代碼,可以使用lambda簡化
語法:lambda 參數列表: 表達式
lambda表達式的參數可有可無,函數的參數在lambda表達式中完全適用
lambda表達式能接受任何數量的參數但只能返回一個表達式的值
三、高階函數:
一、遞歸:函數內部調用自己,必須要有出口
應用:0~N 數的累加和
# 遞歸:函數內部調用自己,必須要有出口
# 應用:0~N 數的累加和
# N = int(input("請輸入 N:"))
N = 5
def sum_num(N):
if N > 0:
return N + sum_num(N-1)
# N == 0 出口
else:
return N
result = sum_num(N)
print(result)
二、lambda表達式:
如果一個函數有一個返回值,並且只有一句代碼,可以使用lambda簡化
語法:lambda 參數列表: 表達式
# lambda表達式:
# 如果一個函數有一個返回值,並且只有一句代碼,可以使用lambda簡化
def fun():
return 100
print(fun)
print(fun())
# 語法:lambda 參數列表: 表達式
fun = lambda: 100
print(fun) # lambda內存地址
print(fun()) # 100
# 函數實現
def add(a, b):
return a + b
result = add(1, 2)
print(result)
# lambda實現
fun = lambda a, b: a + b
print(fun(1, 2))
lambda參數形式
- 無參數
# 1. 無參數
fun = lambda: 100
print(fun())
- 一個參數
# 2. 一個參數
fun = lambda a: a
print(fun('hello python'))
- 默認參數/缺省參數
# 3. 默認參數/缺省參數
fun = lambda a, b, c=100: a + b + c
print(fun(1, 2))
print(fun(1, 2, 3))
- 可變參數: *args
# 4. 可變參數: *args
fun = lambda *args: args
print(fun(10, 20))
print(fun(10, 20, 30))
print(fun(10, 20, 30, 40))
- 可變參數: **kwargs
# 5. 可變參數: **kwargs
fun = lambda **kwargs: kwargs
print(fun(name='Tom', age='21'))
lambda 的應用:列表內字典數據排序
需求:帶判斷的lambda,兩個數據誰大返回誰
# lambda 的應用:列表內字典數據排序
# 帶判斷的lambda,兩個數據誰大返回誰
fun = lambda a, b: a if a > b else b
print(fun(10, 20))
需求:列表數據按字典key的值排序
sort(key=lambda…, reverse=bool)
# 列表數據按字典key的值排序
# sort(key=lambda..., reverse=bool)
students = [
{'name': 'Tom', 'age': 20},
{'name': 'Jake', 'age': 21},
{'name': 'Rouse', 'age': 22}
]
# 按name值升序排列
students.sort(key=lambda x: x['name'])
print(students)
# 按name值降序排列
students.sort(key=lambda x: x['name'], reverse=True)
print(students)
# 按age值升序排列
students.sort(key=lambda x: x['age'])
print(students)
三、高階函數:把函數作爲參數傳入
abs() : 對數字求絕對值
round() : 對數字進行四捨五入
需求:任意兩個數字,按指定要求整理數字後進行求和計算
# 高階函數:把函數作爲參數傳入
# abs() : 對數字求絕對值
# round() : 對數字進行四捨五入
# 需求:任意兩個數字,按指定要求整理數字後進行求和計算
# 方法1
def add_num(a, b):
return abs(a) + abs(b)
result = add_num(-2, 3)
print(result)
# 方法2
def sum_num(a, b, f):
return f(a) + f(b)
result = sum_num(-1, 2, abs)
print(result)
內置高階函數
- map(func, lst)
將傳入的函數變量func作用到lst變量的每個元素,並將結果組成新的列表
# 內置高階函數
# 1. map(func, lst)
# 將傳入的函數變量func作用到lst變量的每個元素,並將結果組成新的列表
list1 = [1, 2, 3, 4, 5]
def func(x):
return x ** 2
result = map(func, list1)
print(result) # <map object at 0x00000271A0209898>
print(list(result)) # [1, 4, 9, 16, 25]
- reduce(func, lst)
func必須有兩個參數,每次 func計算的結果繼續和序列的下一個元素做累積運算
需求:計算list1序列中各個數字的累加和
# 2. reduce(func, lst) :func必須有兩個參數
# 每次func計算的結果繼續和序列的下一個元素做累積運算
# 需求:計算list1序列中各個數字的累加和
import functools
list1 = [1, 2, 3, 4, 5]
def func(a, b):
return a + b
result = functools.reduce(func, list1)
print(result)
- filter(func, lst)
用於過濾序列,過濾掉不符合條件的元素,返回一個filter對象
如果要轉換爲列表,可以使用list()來轉換
# filter(func, lst)
# 用於過濾序列,過濾掉不符合條件的元素,返回一個filter對象
# 如果要轉換爲列表,可以使用list()來轉換
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
return x % 2 == 0
result = filter(func, list1)
print(result) # <filter object at 0x00000254CA2D9940>
print(list(result)) # [2, 4]