日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【Python 必会技巧】lambda 表达式(匿名函数)及其在内置函数中的应用

發(fā)布時(shí)間:2023/12/10 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python 必会技巧】lambda 表达式(匿名函数)及其在内置函数中的应用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

lambda 表達(dá)式,又稱匿名函數(shù),即,函數(shù)沒有具體的名稱,常用來表示內(nèi)部?jī)H包含 1 行表達(dá)式的函數(shù)。

使用 lambda 編寫的代碼更加簡(jiǎn)潔緊湊,但是 lambda 函數(shù)支持的功能卻是十分有限的,目前 PEP8 已經(jīng)不建議使用 lambda,而是推薦使用 def 去定義一個(gè)函數(shù),即便如此,作為 Python 程序員,認(rèn)識(shí)和了解該匿名函數(shù)還是有必要的。

  • lambda 只是一個(gè)表達(dá)式,函數(shù)體比 def 簡(jiǎn)單很多。
  • lambda 的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在 lambda 表達(dá)式中封裝有限的邏輯進(jìn)去。
  • lambda 函數(shù)擁有自己的命名空間,且不能訪問自有參數(shù)列表之外或全局命名空間里的參數(shù)。
  • 雖然 lambda 函數(shù)看起來只能寫一行,卻不等同于 C 或 C++ 的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時(shí)不占用棧內(nèi)存從而增加運(yùn)行效率。

lambda 的語法:lambda argument(s):expression

lambda 函數(shù)可以有很多個(gè)參數(shù),但是只能有一個(gè)表達(dá)式。lambda 操作符不能有任何聲明,它返回一個(gè)函數(shù)對(duì)象,可以將此函數(shù)對(duì)象賦值給任何變量。

lambda 函數(shù)簡(jiǎn)單示例:

lambda x, y: x * y # 函數(shù)輸入是 x 和 y,輸出是它們的積 x*y lambda:None # 函數(shù)沒有輸入?yún)?shù),輸出是 None >>> a = lambda x: x+1 >>> a(1) 2# 用 def 函數(shù)表示如下:>>> def a(x):return x+1 >>> a(1) 2

lambda 函數(shù)與 def 的主要不同點(diǎn):

  • lambda 可以立刻傳遞(無需變量),自動(dòng)返回結(jié)果;
  • lambda 在內(nèi)部只能包含一行代碼;
  • lambda 是一個(gè)為編寫簡(jiǎn)單的函數(shù)而設(shè)計(jì)的,而 def 用來處理更大的任務(wù);
  • lambda 可以定義一個(gè)匿名函數(shù),而 def 定義的函數(shù)必須有一個(gè)名字。

lambda 函數(shù)的優(yōu)勢(shì):

  • 對(duì)于單行函數(shù),使用 lambda 表達(dá)式可以省去定義函數(shù)的過程,讓代碼更加簡(jiǎn)潔;
  • 對(duì)于不需要多次復(fù)用的函數(shù),使用 lambda 表達(dá)式可以在用完之后立即釋放,提高程序執(zhí)行的性能。

lambda 函數(shù)經(jīng)常用于一些內(nèi)置函數(shù)中:

map() 函數(shù):遍歷序列,對(duì)序列中每個(gè)元素進(jìn)行操作,此時(shí) lambda 函數(shù)用于指定對(duì)列表中每一個(gè)元素的共同操作條件。

>>> list1 = [1, 2, 3, 4] >>> list2 = [5, 6, 7 ,8] >>> list3 = map(lambda a, b: a + b, list1, list2) # 將兩個(gè)列表中對(duì)應(yīng)的元素相加 >>> print(list3) <map object at 0x000001EA57C07780> >>> print(list(list3)) [6, 8, 10, 12]

filter() 函數(shù):對(duì)于序列中的元素進(jìn)行篩選操作,此時(shí) lambda 函數(shù)用于指定過濾列表元素的條件。

>>> list1 = [1, 2, 3, 4] >>> list2 = filter(lambda a: a > 2, list1) # 篩選出列表中大于 2 的元素 >>> print(list2) <filter object at 0x000001EA57C07898> >>> print(list(list2)) [3, 4]

reduce() 函數(shù):對(duì)于序列中所有元素進(jìn)行累積操作,此時(shí) lambda 函數(shù)用于指定列表中兩兩相鄰元素的累積條件。

>>> from functools import reduce >>> list1 = [1, 2, 3, 4] >>> list2 = reduce(lambda a, b: a + b, list1) # 兩兩相鄰元素進(jìn)行相加操作 >>> print(list2) 10 >>> list2 = reduce(lambda a, b: a * b, list1) # 兩兩相鄰元素進(jìn)行相乘操作 >>> print(list2) 24

sorted() 函數(shù):對(duì)于序列中的元素進(jìn)行排序操作,此時(shí) lambda 函數(shù)用于指定對(duì)列表中所有元素進(jìn)行排序的條件。

>>> list1 = [1, 2, 3, 4, 5, 6, 7, 8] >>> list2 = sorted(list1, key = lambda a: abs(4-a)) # 將列表元素按照與 4 的距離從小到大進(jìn)行排序 >>> print(list2) [4, 3, 5, 2, 6, 1, 7, 8]

其他資料:《不要在Python中編寫 lambda 表達(dá)式了,不建議大家使用它》

總結(jié)

以上是生活随笔為你收集整理的【Python 必会技巧】lambda 表达式(匿名函数)及其在内置函数中的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。