Python入門到精通Day12:06-15-lambda

happylifetree發表於2020-12-03

三、lambda表示式
3.1 lambda的應用場景
如果一個函式有一個返回值,並且只有一句程式碼,可以使用lambda簡化。(可以簡化程式碼,又可以節省伺服器記憶體開銷。)

3.2 lambda語法
lambda 引數列表 : 表示式
表示式必須有返回值。
注意:
lambda表示式的引數可有可無,函式的引數在lambda表示式中完全適用。
lambda表示式能接收任何數量的引數但只能返回一個表示式的值。

# 1. 函式
def fn1():
    return 100

result = fn1()
print(result)   # 100

print(fn1)  # <function fn1 at 0x000001E4D0FB7280>
print(fn1())    # 100

# 2. lambda表示式 匿名函式
fn2 = lambda: 100
print(fn2)  # <function <lambda> at 0x0000020859EB9040> # lambda記憶體地址
# 100返回值 呼叫函式
print(fn2())    # 100

注意:直接列印lambda表示式,輸出的是此lambda的記憶體地址。

3.3示例:計算a + b
3.3.1 函式實現

def add(a, b):
    return a + b


result = add(1, 2)
print(result)   # 3

思考:需求簡單,是否程式碼多?
3.3.2 lambda實現

fn1 = lambda a, b: a + b
print(fn1(1, 2))    # 3

3.4 lambda的引數形式
3.4.1 無引數

fn1 = lambda: 100
print(fn1())  # 100

3.4.2 一個引數

fn2 = lambda a: a
print(fn2('hello world!'))  # hello world!

3.4.3 預設引數(預設引數)

fn1 = lambda a, b, c=100: a + b + c
print(fn1(10, 20))  # 130
print(fn1(10, 20, 200))  # 230

3.4.4 可變引數:*args

fn1 = lambda *args: args
print(fn1(10, 20, 30))  # (10, 20, 30)
print(fn1(10, 20, 30, 40))  # (10, 20, 30, 40)

注意:這裡的可變引數傳入到lambda之後,返回值為元組。

3.4.5 可變引數: **kwargs

fn1 = lambda **kwargs: kwargs
print(fn1(name='Python'))  # {'name': 'Python'}
print(fn1(name='Python', age=30))  # {'name': 'Python', 'age': 30}

3.5 lambda的應用
3.5.1 帶判斷的lambda

# lambda 兩個數字比大小,誰大返回誰
fn1 = lambda a, b: a if a > b else b
print(fn1(1000, 500))   # 1000
print(fn1(20, 50))  # 50

3.5.2 列表資料按字典key的值排序

student = [
    {'name':'TOM', 'age':20},
    {'name':'ROSE', 'age':19},
    {'name':'Jack', 'age':22},
]

# sort(key=lambda..., reverse=bool資料)
# 1. name key 對應的值進行升序排序
student.sort(key=lambda x: x['name'])
print(student)
# [{'name': 'Jack', 'age': 22}, {'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}]

# 2. name key 對應的值進行降序排序
student.sort(key= lambda x: x['name'], reverse=True)
print(student)
# [{'name': 'TOM', 'age': 20}, {'name': 'ROSE', 'age': 19}, {'name': 'Jack', 'age': 22}]

# 3, age key對應的值進行升序排序
student.sort(key= lambda x: x['age'])
print(student)
# [{'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}, {'name': 'Jack', 'age': 22}]

相關文章