1. 程式人生 > 其它 >函式進階5.6匿名函式

函式進階5.6匿名函式

一、是什麼

匿名函式:沒有名字的函式,在Python中用lambda定義

示例

lambda x, y: x + y  # 定義了一個匿名函式 1.沒有名字 2.完成2個數的加法操作

  

二、做什麼

  1. 可以用一行程式碼完成簡單的函式定義
  2. 可以當做實參快速傳遞到函式中去

三、怎樣用

lambda關鍵詞能匿名函式。這種函式得名於省略了用def宣告函式的標準步驟

1. 格式

lambda函式的語法只包含一個語句,如下:

lambda 形參1, 形參2, 形參3: 表示式

  

2. 注意

lambda函式能接收任何數量的引數但只能返回一個表示式的值,其預設就是返回的,不用寫return

3. 使用方式

既然我們已經知道def定義函式時的變數儲存的是函式的引用,所以只要有了這個函式的引用,也就可以通過變數名()的方式呼叫函式

而,函式分為def定義的普通函式,和用lambda定義的匿名函式,所以無論一個變數例如b儲存的是普通函式的引用,還是匿名函式的引用,都可以用b()方式呼叫b指向的函式

一般情況下對匿名函式的使用有2種方式

  1. 通過lambda定義匿名函式,然後用一個變數指向這個匿名函式,然後通過變數名()呼叫這個匿名函式
  2. 直接在呼叫其它函式實參的位置通過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)  # 定義一個匿名函式,且將它的引用當做實參進行傳遞

  

四、案例

想一想,下面的資料如何指定按agename排序?

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)

  

說明