lambda
表示式的主要作用就是化簡程式碼。
匿名函式一般都是作為引數使用,其他地方一般不會使用。
1、lambda的應用場景
如果一個函式有一個返回值,並且只有一句程式碼,可以使用lambda
簡化。
2、lambda語法
lambda 引數列表 : 表示式
注意:
lambda
表示式的引數可有可無,函式的引數在lambda
表示式中完全適用。lambda
表示式能接收任何數量的引數但只能返回一個表示式的值。
3、快速入門
# 函式
def fn1():
return 200
print(fn1) # <function fn1 at 0x0000000002665948>
print(fn1()) # 200
# lambda表示式
# lambda 引數列表: 表示式
fn2 = lambda: 100
print(fn2) # <function <lambda> at 0x00000000026658B8>
print(fn2()) # 100
注意:直接列印
lambda
表示式,輸出的是此lambda
的記憶體地址。
圖示如下:
4、示例:計算a + b
(1)函式實現
def add(a, b):
return a + b
result = add(1, 2)
print(result) # 3
思考:需求簡單,是否程式碼多?
(2)lambda實現
fn1 = lambda a, b: a + b
print(fn1(1, 2)) # 3
5、lambda的引數形式
(1)無引數
fn1 = lambda: 100
print(fn1()) # 100
(2)一個引數
fn1 = lambda a: a
print(fn1('hello world')) # hello world
(3)預設引數
fn1 = lambda a, b, c=100: a + b + c
print(fn1(10, 20)) # 130
print(fn1(10, 20, 200)) # 230
(4)可變引數:*args
fn1 = lambda *args: args
print(fn1(10, 20, 30)) # (10, 20, 30)
print(fn1(10)) # (10,)
注意:這裡的可變引數傳入到
lambda
之後,返回值為元組。
(5)可變引數:**kwargs
fn1 = lambda **kwargs: kwargs
print(fn1(name='Python')) # {'name': 'Python'}
print(fn1(name='python', age=20)) # {'name': 'python', 'age': 20}
注意:這裡的可變引數傳入到
lambda
之後,返回值為字典。
6、lambda的應用
(1)帶判斷的lambda
# 需求:比較兩個數大小,誰大返回誰
fn1 = lambda a, b: a if a > b else b
print(fn1(1000, 500))
(2)列表資料按字典key的值排序
students = [
{'name': 'TOM', 'age': 20},
{'name': 'ROSE', 'age': 19},
{'name': 'Jack', 'age': 22}
]
# 按name值升序排列(x表示升降序的元素,這裡是字典變數)
students.sort(key=lambda x: x['name'])
print(students)
# 按name值降序排列(reverse=True 降序)
students.sort(key=lambda x: x['name'], reverse=True)
print(students)
# 按age值升序排列
students.sort(key=lambda x: x['age'])
print(students)