python中的lambda函數

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作爲函數的返回值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章