Python lambda函數教程展示瞭如何在Python中創建匿名函數。Python中的匿名函數是使用lambda關鍵字創建的。
1 介紹
Python lambda函數也稱爲匿名函數,是沒有名稱的內聯函數。它們是用lambda關鍵字創建的。這是內置Python的函數範型的一部分。
Python lambda函數僅限於一個表達式。它們可以在任何可以使用正常功能的地方使用。
Python lambda具有以下語法:
z = lambda x: x * y
語句使用lambda關鍵字創建匿名函數。函數將兩個值相乘。x是傳遞給lambda函數的參數。參數x後面跟着一個冒號字符。冒號右邊的代碼是在調用lambda函數時執行的表達式。lambda函數被分配給z變量。
1.1 簡單使用
在下面示例中,我們有兩個函數對一個值求平方。
def square(x):
return x * x
# 這裏我們用lambda定義一個匿名的內聯函數。請注意,該函數沒有名稱。sqr_fun是保存創建的lambda函數的變量的名稱
sqr_fun = lambda x: x * x
print(square(3))
print(sqr_fun(4))
9
16
lambda函數也可以不輸入,示例如下:
def constant():
return 1
# lambda本質是一個匿名函數
constant_fun = lambda: 1
print(constant())
print(constant_fun())
1
1
lambda函數也可以多輸入參數,示例如下:
def product(x, y):
return x * y
# 冒號左邊輸入兩個參數
product_fun = lambda x,y : x * y
print(product(3,4))
print(product_fun(4,3))
12
12
1.2 Python lambda與map
Python lambda函數對於該map() 函數很有用。我們可以創建更簡潔的代碼。Python map() 是一個內置函數,它將給定的函數應用於迭代器iterable的每一項,並返回一個迭代器iterator對象。
注意的是Python2 map函數返回列表,Python3 map函數返回迭代器。
def square(x):
return x * x
# 計算列表各個元素的平方
result=map(square,[1,2,3,4,5])
print(result)
# 需要遍歷迭代器
for i in result:
print(i)
<map object at 0x7fc638814c10>
1
4
9
16
25
Python lambda函數對於map()函數很有用。我們可以創建更簡潔的代碼。Python map()是一個內置函數,它將給定的函數應用於iterable的每個項,並返回一個迭代器對象。
以下示例爲map()創建了一個內聯函數作爲參數。使用map()函數,我們將lambda函數應用於列表的每個元素。
nums = [1, 2, 3, 4, 5, 6]
nums_squared = map(lambda x: x * x, nums)
for num in nums_squared:
print(num)
1
4
9
16
25
36
當然lambada函數可以結合map()函數,輸入兩個參數,以下示例提供了兩個列表,對兩個列表中相同位置的數據進行相加
num_add = map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
for num in num_add:
print(num)
3
7
11
15
19
1.3 Python lambda與filter
Python lambda函數可以與filter()函數一起使用。函數的作用是:從iterable中返回true的元素構造一個列表。
filte()函數爲python自帶函數,主要用於過濾掉不符合設定條件的元素,並返回符合條件元素組成的迭代器iterable。該函數有兩個輸入參數,第一個參數爲處理函數,第二個參數爲要處理的序列。序列的每個元素作爲參數給函數進行判斷,返回True或 False,過濾到返回False的參數,並將返回 True 的元素放到迭代器中。
下面示例展示通過使用filter()濾除奇數示例如下:
def is_even(x):
return x % 2 == 0
result = filter(is_even, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(result)
for i in result:
print(i)
<filter object at 0x7fc638548650>
2
4
6
8
10
以下示例中,lambda函數結合filter函數過濾了整數列表。新列表僅包含奇數整數。filter()中第一個函數爲處理列表元素的函數,也就是lambda函數。
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
nums_filtered = list(filter(lambda x: x % 2, nums))
print(nums_filtered)
[1, 3, 5, 7, 9, 11]
1.4 Python lambda與sort
Python列表有一個內置的列表排序()就地修改列表的方法。該方法有一個關鍵參數,用於在進行比較之前指定要在每個列表元素上調用的函數。在這裏我們可以使用lambda函數。以下示例展示了使用lambda函數,按照用戶的出生日期以相反的順序對其進行排序。
users = [
{'name': 'John Doe', 'date_of_birth': 1987},
{'name': 'Jane Doe', 'date_of_birth': 1996},
{'name': 'Robert Brown', 'date_of_birth': 1977},
{'name': 'Lucia Smith', 'date_of_birth': 2002},
{'name': 'Patrick Dempsey', 'date_of_birth': 1994}
]
# 獲取列表的date_of_birth對應的值
def takeBirth(elem):
return elem['date_of_birth']
# 從小到大排列
users.sort(key=takeBirth)
for user in users:
print(user)
print('-'*50)
# list.sort()中reverse表示從大到小排列,key表示指定列表中的某個元素進行排列
users.sort(reverse=True, key=lambda e: e['date_of_birth'])
for user in users:
print(user)
{'name': 'Robert Brown', 'date_of_birth': 1977}
{'name': 'John Doe', 'date_of_birth': 1987}
{'name': 'Patrick Dempsey', 'date_of_birth': 1994}
{'name': 'Jane Doe', 'date_of_birth': 1996}
{'name': 'Lucia Smith', 'date_of_birth': 2002}
--------------------------------------------------
{'name': 'Lucia Smith', 'date_of_birth': 2002}
{'name': 'Jane Doe', 'date_of_birth': 1996}
{'name': 'Patrick Dempsey', 'date_of_birth': 1994}
{'name': 'John Doe', 'date_of_birth': 1987}
{'name': 'Robert Brown', 'date_of_birth': 1977}
2 參考
https://www.runoob.com/python/python-built-in-functions.html