Python基礎第十二篇(遞歸、lambda、高階函數)

一、遞歸:函數內部調用自己,必須要有出口

二、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. 無參數
# 1. 無參數
fun = lambda: 100
print(fun())
  1. 一個參數
# 2. 一個參數
fun = lambda a: a
print(fun('hello python'))
  1. 默認參數/缺省參數
# 3. 默認參數/缺省參數
fun = lambda a, b, c=100: a + b + c
print(fun(1, 2))
print(fun(1, 2, 3))
  1. 可變參數: *args
# 4. 可變參數: *args
fun = lambda *args: args
print(fun(10, 20))
print(fun(10, 20, 30))
print(fun(10, 20, 30, 40))
  1. 可變參數: **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)

內置高階函數

  1. 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]
  1. 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)
  1. 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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章