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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 中的匿名函数,你会用吗

發布時間:2025/3/20 python 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 中的匿名函数,你会用吗 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概念

我們從一個例子引入。

這里有一個元素為非空字符串的列表,按字符串最后一個字母將列表進行排序。如果原列表是 [‘abc’, ‘g’, ‘def’],則結果應該是 [‘abc’, ‘def’, ‘g’]。

很容易得到如下代碼

我們發現, get_last_element 這個方法比較簡單,并且只用了一次,但必須定義后得到一個名稱才能使用。在上面的情境中,使用起來稍微麻煩了點,我們能不能直接定義了就用呢?當然可以。

使用很簡單,有如下幾個關鍵點

使用 lambda 關鍵字自動 return,不需要你自己寫只有一行代碼
知道了上面的內容,匿名函數的概念也大致清晰了。

使用誤區

知道了匿名函數后,我們在開發的時候有時候不經意就把這個東西濫用了。

1 .給匿名函數命名

PEP 8 中建議我們不要寫類似下面的代碼

匿名函數可以直接當做變量一樣傳遞,比如傳給函數作為參數,并不要求它一定有個名字。

需要注意的是,其實上面的操作并沒有真正起到給函數命名的作用。

如果需要給定義的函數命名,使用 def 關鍵字即可

通過 def 定義的函數才是真正有名稱的,匿名函數的名稱永遠是 lambda

2. 沒有必要的匿名函數

某些時候,我們沒有使用匿名函數的必要,但卻無意中使用了。

一般有兩種情況。一是使用無意義的調用,比如下面的代碼

將列表按元素的長度進行排序。

其實,我們可以直接這樣

上面的一提出來大家馬上就理解了,但是平時我們卻或多或少的犯了類似的毛病。

另一方面,有很多函數,標準庫中都已經實現了,我們不知道,所以做了多余的事情。

比如這里

這里的匿名函數可以直接用 mul 函數替換

Python 的 operator 模塊提供了很多常用的操作,熟悉了后,你會慢慢喜歡上它的。里面除了算術、比較等操作,關于對字典、對象的操作也值得一提。

itemgetter 函數,根據鍵獲取字典的值

attrgetter 函數,根據屬性獲取對應值

3. 降低可讀性的匿名函數

按元素的長度和字典序對列表進行排序

上面的代碼能夠實現功能,但是我覺得下面的可讀性更強一些

我們通過函數函數名就大概知道了函數的作用,如果是匿名函數的話,我們還得去看相應的邏輯。

4. 可能根本不需要傳遞函數

對一個列表進行求和,我們可能會看到這樣的代碼

其實,直接使用 sum 函數就行了

對于一些特定的需求,很多時候 Python 可能已經有了現成的方案。我們要有這方面的意識,盡可能簡單的去解決問題。

5. 可以不使用 map/filter

Python 中的 map 和 filter 一般都結合匿名函數在使用,前者是在迭代過程中對元素做一些處理,后者是過濾掉一些元素。很多情況下,我們可以使用列表推導式或者生成器表達式代替它們。

用生成器表達式代替 map

用生成器表達式代替 filter

明顯的可以看出,使用生成器表達式的代碼可讀性更強一些。

什么時候使用匿名函數

說了這么多匿名函數使用的誤區,那么什么時候使用比較合理呢?我覺得滿足下面的幾個點,就可以考慮考慮了。

只用一次函數邏輯簡單使用匿名函數前盡可能的確定 Python 沒有自帶類似功能的函數

總結

以上是生活随笔為你收集整理的Python 中的匿名函数,你会用吗的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。