『無為則無心』Python函式 — 34、lambda表示式

繁華似錦Fighting發表於2022-01-07

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的記憶體地址。

圖示如下:

image

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)

相關文章