1. 程式人生 > >python之匿名函數以及在內置函數中的使用

python之匿名函數以及在內置函數中的使用

tor 一行 想要 接受 一個 不同的 特點 需要 結果

一. 匿名函數

Python使用 lambda 來創建匿名函數。所謂匿名函數,它與用 def 關鍵字定義的函數相比,沒有函數名稱。

1.1 匿名函數定義及特點

語法:

lambda [para1, para2, ...]: expression

從匿名函數的定義格式可以看出:

1. lambda後沒有跟函數名,這就是匿名函數名稱的由來.

2. [para1, para2, ...]是一個參數列表,它是可選的,而且是任何類型的.

3. expression表達式實現匿名函數功能的過程,並返回操作結果, 具有通常函數return的功能.

4. 整個匿名函數要在一行內實現所有定義.

1.2 代碼示例

>>> lambda x, y: x+y    # 在一行定義匿名函數
<function <lambda> at 0x00000217D39E1F28>    # 打印上面

>>> a = lambda x, y: x + y    # 定義匿名函數並賦值給a
>>> a(2, 3)                   # a具有匿名函數的功能, 通過參數傳值
5                             # 輸出結果

說明:

lambda的冒號前面表示的是參數,冒號後面的是表達式. 註意, lambda

可以接受任意多個參數, 但只能有一個表達式.

1.3 匿名函數的優點

1 使用Python寫一些腳本時,使用lambda可以省去定義函數的過程,讓代碼更加精簡.
2 對於一些抽象的,不會被別的地方再重復使用的函數,有時候函數起個名字也是個難題,使用lambda不需要考慮命名的問題.
3 使用lambda在某些時候能使代碼更容易理解.

二. 匿名函數在內置函數中的使用

匿名函數一般不單獨使用,經常與一些內置函數一塊使用.

能使用匿名函數的內置函數為:

map,filter,max,min,sorted

記住上面這五個!!!

2.1 在 map
函數中的使用

map()函數接受兩個參數.一個是函數, 一個是 Iterable(可叠代).

map 將傳入的函數依次作用到序列的每個元素上., 並把結果作為新的 Iterator 返回.

舉個例子:

def f(x):
    return x * x


lis = [1, 2, 3, 4, 5]
res = map(f, lis)        # 求列表中每個數的平方
print(res)                  # 此時返回的是一個對象
<map object at 0x00000254573B0B38>

print(list(res))           # 可以直接用list()求結果
[1, 4, 9, 16, 25]

用 lambda 表示就是這樣:

lis = [1, 2, 3, 4, 5]
res = map(lambda x: x*x, lis)    # 求列表中每個數的平方

print(res)                                  # 同上面的例子一樣,返回的是一個對象
<map object at 0x000001D102040B38>

print(list(res))                           # 用list()獲取結果
[1, 4, 9, 16, 25]

2.2 在 filter 函數中的使用

和map()類似, filter()也接受一個函數,一個序列.

與map()不同的是,filter()把傳入的函數依次作用於每個元素, 然後根據返回值是True還是False來決定保留還是丟棄該元素.

filter() 會根據判斷結果自動過濾掉不符合條件的元素, 只返回由符合條件的元素組成的新列表(需要list一下).

舉個例子:

# 在一個列表中, 刪除偶數, 保留奇數
def is_odd(x):
    return x%2 == 1


lis = [1, 2, 3, 4, 5, 6, 7, 8, 9]
res = filter(is_odd, lis)
print(res)                               # 註意, 這裏依舊返回的是對象
<filter object at 0x0000022832D00C18>

print(list(res))                         # 這樣返回的才是我們想要的結果
[1, 3, 5, 7, 9]

用 lambda 表示就是這樣:

# 在一個列表中, 刪除偶數, 保留奇數

lis = [1, 2, 3, 4, 5, 6, 7, 8, 9]
res = filter(lambda x: x % 2 == 1, lis)
print(res)                               # 同上例子,返回的是對象.
<filter object at 0x0000020A8F240B38>

print(list(res))                         # 這樣就是我們想要的結果
[1, 3, 5, 7, 9]

2.3 在 max 函數中的使用

2.4 在 min 函數中的使用

2.5 在 sorted 函數中的使用

python之匿名函數以及在內置函數中的使用