Python Lambda 用法大全 一、Lambda表達式基礎 Lambda 的組成分為三部分 Lambda表達式是Python中的一種匿名函數,它可以在一行代碼中定義函數並立即調用它。與普通函數不同的是,Lambda函數通常不需要使用def關鍵字去定義,而是在需要時直接使用lambda關鍵字來創 ...
Python Lambda 用法大全
一、Lambda表達式基礎
Lambda 的組成分為三部分
Lambda表達式是Python中的一種匿名函數,它可以在一行代碼中定義函數並立即調用它。與普通函數不同的是,Lambda函數通常不需要使用def關鍵字去定義,而是在需要時直接使用lambda關鍵字來創建。Lambda函數可以接受任意數量的參數,但只能返回一個表達式的結果。Lambda表達式的語法形式如下:
lambda arguments: expression
其中,arguments為函數的參數列表,expression為函數的返回值表達式。當參數列表為多個參數時,使用逗號分隔即可。Lambda函數返回一個函數對象,這個函數對象可以被調用,也可以被賦值給變數,甚至可以作為其他函數的參數。
Lambda表達式的基本用法:
(lambda x, y: x + y)(1, 2) # 輸出3
(lambda x: x * x)(3) # 輸出9
(lambda x: (x % 2 == 0))(4) # 輸出True
(lambda x: (x % 2 == 0))(3) # 輸出False
add = lambda x, y: x + y
print(add(1, 2)) # 輸出3
二、Lambda表達式應用場景
1. 函數作為參數
Lambda表達式可以作為函數的參數傳遞
result = map(lambda x: x * x, [1, 2, 3, 4, 5])
print(list(result)) # 輸出[1, 4, 9, 16, 25]
#將小於0.5的數設置為0,大於0.5的設置為1
import numpy as np
a=np.array ([0.1,0.2,0.3,0.6,0.8])
result = map(lambda x:( 0 if x<0.5 else 1),a)
print(list(result)) # [0, 0, 0, 1, 1]
2. 條件篩選
filter函數接收一個Lambda表達式和一個序列,它會返回序列中所有偶數組成的新序列。
result = filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5])
print(list(result)) # 輸出[2, 4]
3. 函數式編程
Lambda表達式可以作為函數的返回值,用於構造更為複雜的計算過程
def add_function(n):
return lambda x: x + n
add_3 = add_function(3)
print(add_3(4)) # 輸出7
def do_something(callback):
data = "Hello, World!"
result = callback(data)
print(result)
do_something(lambda x: len(x)) # 輸出13
三、Lambda表達式和map、filter、reduce的結合
1. Lambda表達式和map的結合
map函數和Lambda表達式常常一起使用,可以對序列中的每個元素應用Lambda表達式,並返回結果序列。
result = map(lambda x: x * x, [1, 2, 3, 4, 5])
print(list(result)) # 輸出[1, 4, 9, 16, 25]
2. Lambda表達式和filter的結合
filter函數和Lambda表達式組合使用可以實現對序列中符合特定條件的元素進行篩選。
result = filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5])
print(list(result)) # 輸出[2, 4]
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) #[2, 4, 6, 8, 10]
#上面的代碼使用了filter()函數來過濾列表numbers,使用Lambda表達式判斷元素是否為偶數。最終輸出的是篩選出來的偶數列表。
3. Lambda表達式和reduce的結合
reduce函數可以對序列中的元素依次累加,Lambda表達式可以定義累加過程。
from functools import reduce
result = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
print(result) # 輸出15
四、Lambda表達式在Python中的高級用法
1. 列表排序(sort)
列表的sort方法可以接收一個key參數,用於定義列表排序的規則。Lambda表達式可以作為參數傳遞給key,定義更複雜的列表排序規則。
fruits = ["apple", "orange", "banana", "lemon"]
fruits.sort(key=lambda x: len(x))
print(fruits) # 輸出['apple', 'lemon', 'banana', 'orange']
students = [('Jack', 30), ('Bob', 27), ('Linda', 25), ('Mike', 28)]
students.sort(key=lambda student: student[1])
print(students) #[('Linda', 25), ('Bob', 27), ('Mike', 28), ('Jack', 30)]
2. 列表切片
Lambda表達式可以用來指定切片的起始位置和結束位置。
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = nums[lambda x: 2:lambda x: 5]
print(result) # 輸出[3, 4, 5]
3. 字典排序(sorted)
在Python中,可以使用sorted函數對字典進行排序。Lambda表達式可以指定排序規則。
data = {"apple": 5, "orange": 3, "banana": 8, "lemon": 1}
sorted_data = sorted(data.items(), key=lambda x: x[1])
print(sorted_data) # 輸出[('lemon', 1), ('orange', 3), ('apple', 5), ('banana', 8)]
Lambda表達式註意事項
- Lambda表達式的使用場景一般用於定義簡單的函數,如果需要編寫複雜的函數,建議使用普通函數。
- Lambda表達式用於匿名函數,只能有一個表達式,不用寫return,自動返回其表達式的結果。
- Lambda表達式是表達式,不是語句,因此不能包含迴圈、條件判斷等複雜的語句。
- Lambda函數也是函數對象,可以將其賦值給變數或作為其他函數的參數來使用。
- Lambda表達式可以被Python的函數式編程模塊(如filter()、map())所使用。
參考鏈接
https://www.jb51.net/python/304650qbh.htm
https://blog.csdn.net/naer_chongya/article/details/130770037
https://baijiahao.baidu.com/s?id=1781168343754714555&wfr=spider&for=pc
收藏 關註 評論