lambda是python中定義關鍵字,且使用頻次較高,以下內容爲lambda函數的語法、特性、用法和lambda函數改寫成python標準函數。
lambda函數語法:
lambda args: expression
- args:參數,參數的形式可以有如下的形式
a, b
a=1, b=2
*args
**kwargs
a, b=1, *args
空
- expression:匿名函數返回值的邏輯表達式,假如expression是a + b, 那匿名函數的返回值就是a + b的值
1
None
a + b
sum(a)
1 if a >10 else 0
lambda函數的特性
- lambda函數沒有名字。
- lambda函數輸入:傳入到參數列表argument_list的值;輸出:表達式expression計算得到的值
- lambda函數一般功能簡單,只能完成非常簡單的功能
lambda函數的用法
- 將lambda函數賦值給一個變量
>>>my_func = lambda a : 0 if a > 1 else 2
>>>my_func(2)
0
- 將lambda函數賦值給一個函數
# 改寫代碼原來的邏輯
>>>def print_name():
>>> print("code of wang")
>>>print_name = lambda : print('aaa')
>>>print_name()
aaa
# 屏蔽或者改寫系統原有的函數
import time
time.sleep = lambda x: None
def time_test():
start = time.time()
time.sleep(3)
stop = time.time()
print(stop-start)
time_test() # 輸出的值爲2.1457672119140625e-06,也就是說我電腦執行這段代碼的時間是0.000002秒左右
- 將lambda函數作爲返回值,很好的詮釋了python中萬物皆對象的特點
>>>def factory_func():
return lambda x, y: x+y
>>>a = factory_func()
>>>a
<function factory_func.<locals>.<lambda> at 0x1012f8e18>
>>>a(1, 2)
3
- 將lambda函數作爲參數傳遞給其他函數,------函數式編程map、filter、sorted、reduce
這裏我在自己私下裏敲代碼時得到a是filter object對象,好多資料和網上的教程寫的是python3中filter返回迭代器對象,但是我調用了iter()和next方法都無法獲取filter object的值,只能通過list()方法獲取,這一點我不明白,希望有大神看到可以幫我解答一下…
# 1.用於filter函數
>>>a = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 6])
>>>list(a)
[3, 6]
# 2.用於sorted函數
# 按照距離5的距離從小到大進行排序
>>>sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
[5, 4, 6, 3, 7, 2, 8, 1, 9]
# 3.用於map函數
>>>new_list = map(lambda x: x+1, [1, 2, 3])
>>>list(new_list)
[2, 3, 4]
# 4.用於reduce函數
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函數
15
lambda函數轉標準函數
1.首先根據lambda函數的功能爲函數做一個三個詞之內能概括的英文註釋
2.將註釋作爲函數的函數名,args作爲參數,expression作爲函數的返回值