函式進階5.6匿名函式
阿新 • • 發佈:2021-12-17
一、是什麼
匿名函式:沒有名字的函式,在Python中用lambda
定義
示例
lambda x, y: x + y # 定義了一個匿名函式 1.沒有名字 2.完成2個數的加法操作
二、做什麼
- 可以用一行程式碼完成簡單的函式定義
- 可以當做實參快速傳遞到函式中去
三、怎樣用
用lambda
關鍵詞能匿名函式。這種函式得名於省略了用def
宣告函式的標準步驟
1. 格式
lambda
函式的語法只包含一個語句,如下:
lambda 形參1, 形參2, 形參3: 表示式
2. 注意
lambda
函式能接收任何數量的引數但只能返回一個表示式的值,其預設就是返回的,不用寫return
3. 使用方式
既然我們已經知道def
定義函式時的變數儲存的是函式的引用,所以只要有了這個函式的引用,也就可以通過變數名()
的方式呼叫函式
而,函式分為def
定義的普通函式,和用lambda
定義的匿名函式,所以無論一個變數例如b
儲存的是普通函式的引用,還是匿名函式的引用,都可以用b()
方式呼叫b指向的函式
一般情況下對匿名函式的使用有2種方式
- 通過
lambda
定義匿名函式,然後用一個變數指向這個匿名函式,然後通過變數名()
呼叫這個匿名函式 - 直接在呼叫其它函式實參的位置通過
lambda
定義匿名函式,會將這個匿名函式的引用當做實參進行傳遞
方式1示例:
# 定義了一個匿名函式,然後讓變數add_2_nums指向它 add_2_nums = lambda x, y: x + y # 呼叫add_2_nums指向的匿名函式 print("10+20=" % add_2_nums(10, 20))
以上例項輸出結果:
0+20=30
方式2示例:
def fun(a, b, opt): print("a = %d" % a) print("b = %d" % b) print("result = %d" % opt(a, b)) # 此時opt指向了第7行定義的匿名函式,所以opt(a, b)就相當於呼叫匿名函式 fun(1, 2, lambda x, y: x + y) # 定義一個匿名函式,且將它的引用當做實參進行傳遞
四、案例
想一想,下面的資料如何指定按age
或name
排序?
stus = [ {"name": "wanglaoshi", "age": 18}, {"name": "donglaoshi", "age": 19}, {"name": "dong4716138", "age": 17} ]
按name排序:
stus = [ {"name": "wanglaoshi", "age": 18}, {"name": "donglaoshi", "age": 19}, {"name": "abc", "age": 17} ] print("排序前,stus=", stus) stus.sort(key=lambda x: x['name']) print("排序後,stus=", stus)
按age排序:
stus = [ {"name": "wanglaoshi", "age": 18}, {"name": "donglaoshi", "age": 19}, {"name": "abc", "age": 17} ] print("排序前,stus=", stus) stus.sort(key=lambda x: x['age']) print("排序後,stus=", stus)
說明