欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python匿名函數(shù)之lambda函數(shù)詳解

 更新時間:2025年06月07日 09:49:13   作者:岳來  
這篇文章主要介紹了python匿名函數(shù)之lambda函數(shù),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、概念介紹

匿名函數(shù):是指一類無需定義標識符(函數(shù)名)的函數(shù)或子程序

關鍵字lambda表示匿名函數(shù),冒號前面的n表示函數(shù)參數(shù),可以有多個參數(shù)。

匿名函數(shù)有個限制,就是只能有一個表達式,不用寫return,返回值就是該表達式的結(jié)果。

用匿名函數(shù)有個好處,因為函數(shù)沒有名字,不必擔心函數(shù)名沖突。此外,匿名函數(shù)也是一個函數(shù)對象,也可以把匿名函數(shù)賦值給一個變量,再利用變量來調(diào)用該函數(shù):

有些函數(shù)在代碼中只用一次,而且函數(shù)體比較簡單,使用匿名函數(shù)可以減少代碼量,看起來比較"優(yōu)雅“

相比函數(shù),lamba 表達式具有以下 2 個優(yōu)勢:

  • 對于單行函數(shù),使用 lambda 表達式可以省去定義函數(shù)的過程,讓代碼更加簡潔;
  • 對于不需要多次復用的函數(shù),使用 lambda 表達式可以在用完之后立即釋放,提高程序執(zhí)行的性能。
def calc(x,y):
    return x**y

#換成匿名函數(shù)
calc = lambda x,y:x**y
print(calc(2,5))

def calc(x,y):
    if x > y:
        return x*y
    else:
        return x / y
    
#三元運算換成匿名函數(shù)
calc = lambda x,y:x * y if x > y else x / y
print(calc(2,5))

二、使用場景

2.1、和map函數(shù)一起使用

map()函數(shù)接收兩個參數(shù),一個是函數(shù),一個是Iterable,map將傳入的函數(shù)依次作用到序列的每個元素,并把結(jié)果作為新的Iterator返回

遍歷序列,對序列中每個元素進行函數(shù)操作,最終獲取新的序列。

## 求列表[1,2,3,4,5,6,7,8,9],返回一個n*n 的列表

#一般解決方案
li = [1,2,3,4,5,6,7,8,9]
for ind,val in enumerate(li):
    li[ind] = val * val
print(li)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

# 高級解決方案
li = [1,2,3,4,5,6,7,8,9]
print(list(map(lambda x:x*x,li)))
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

2.2、與reduce函數(shù)一起使用

reduce把一個函數(shù)作用在一個序列[x1, x2, x3, ...]上,這個函數(shù)必須接收兩個參數(shù)reduce把結(jié)果繼續(xù)和序列的下一個元素做累積計算,其效果就是:

reduce(func,[1,2,3]) 等同于 func(func(1,2),3),返回值為單個值

對于序列內(nèi)所有元素進行累計操作

#接受一個list并利用reduce()求積
from functools import reduce
li = [1,2,3,4,5,6,7,8,9]
print(reduce(lambda x,y:x * y,li))
# 結(jié)果=1*2*3*4*5*6*7*8*9 = 362880

a = [12, 34, 56]

print reduce(lambda x , y: x + y, a)  # 102

print reduce(lambda x , y: x - y, a) # -78

2.3、和filter函數(shù)一起使用

filter()也接收一個函數(shù)和一個序列。和map()不同的是,filter()把傳入的函數(shù)依次作用于每個元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。

對于序列中的元素進行篩選,最終獲取符合條件的序列

# 在一個list中,刪掉偶數(shù),只保留奇數(shù)
li = [1, 2, 4, 5, 6, 9, 10, 15]
print(list(filter(lambda x:x % 2==1,li)))  # [1, 5, 9, 15]

# 回數(shù)是指從左向右讀和從右向左讀都是一樣的數(shù),例如12321,909。請利用filter()篩選出回數(shù)
li = list(range(1, 200))
print(list(filter(lambda x:int(str(x))==int(str(x)[::-1]),li)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

2.4、和sorted函數(shù)一起使用

sorted(iterable, /, *, key=None, reverse=False)

接收一個key函數(shù)來實現(xiàn)對可迭代對象進行自定義的排序

  • 可迭代對象:主要與列表,字符串,元祖,集合和字典
  • key:接受一個函數(shù),根據(jù)此函數(shù)返回的結(jié)果,進行排序
  • reverse:排序方向,默認為從小到大,reverse=True為逆向
# 對列表按照絕對值進行排序
li= [-21, -12, 5, 9, 36]
print(sorted(li, key = lambda x:abs(x)))
# [5, 9, -12, -21, 36]

"""
sorted()函數(shù)按照keys進行排序,并按照對應關系返回list相應的元素:

keys排序結(jié)果 => [5, 9,  12,  21, 36]
                |  |    |    |   |
最終結(jié)果     => [5, 9, -12, -21, 36]
"""

# 把下面單詞以首字母排序
li = ['bad', 'about', 'Zoo', 'Credit']
print(sorted(li, key = lambda x : x[0]))
# 輸出['Credit', 'Zoo', 'about', 'bad']
"""
對字符串排序,是按照ASCII的大小比較的,由于'Z' < 'a',結(jié)果,大寫字母Z會排在小寫字母a的前面。
"""

# 假設我們用一組tuple表示學生名字和成績:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
# 請用sorted()對上述列表分別按名字排序
print(sorted(L, key = lambda x : x[0]))
# 輸出[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

# 再按成績從高到低排序
print(sorted(L, key = lambda x : x[1], reverse=True))
# 輸出[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]

2.5、與三元運算結(jié)合

如下:

#if 條件為真的時候返回if前面內(nèi)容,否則返回0 
exp1= lambda x:x+1 if  2==1 else 0 
print(exp1(2))
exp2 = lambda x:x+1 if  1==1 else 0 
print(exp2(2))

輸出:
0
3

#if not 為假返回if not前面內(nèi)容,否則返回0  
exp3 = lambda x:x+1 if not 2==1 else 0  
print(exp3(2))  
  
exp4 = lambda x:x+1 if not 1==1 else 0  
print(exp4(2))

輸出:
3
0

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • python實現(xiàn)批量視頻分幀、保存視頻幀

    python實現(xiàn)批量視頻分幀、保存視頻幀

    這篇文章主要為大家詳細介紹了python實現(xiàn)批量視頻分幀、保存視頻幀,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Django集成富文本編輯器summernote的實現(xiàn)步驟

    Django集成富文本編輯器summernote的實現(xiàn)步驟

    在最近的項目中小編使用了這個富文本編輯器,選擇它的主要原因是配置非常簡單,默認支持普通用戶上傳圖片(不像ckeditor默認只有staff user才能上傳圖片。如果要讓普通用戶上傳圖片,還需修改源碼裝飾器)?,F(xiàn)在讓我們來看看如何使用這個富文本編輯器
    2021-05-05
  • Python中使用select模塊實現(xiàn)非阻塞的IO

    Python中使用select模塊實現(xiàn)非阻塞的IO

    這篇文章主要介紹了Python中使用select模塊實現(xiàn)非阻塞的IO,本文使用一個簡單聊天室程序講解Python中的select模塊使用,需要的朋友可以參考下
    2015-02-02
  • 利用Python中的pandas庫對cdn日志進行分析詳解

    利用Python中的pandas庫對cdn日志進行分析詳解

    這篇文章主要介紹了利用Python中的pandas庫進行cdn日志分析的相關資料,文中分享了pandas對cdn日志分析的完整示例代碼,然后詳細介紹了關于pandas庫的相關內(nèi)容,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • Python自動檢測SSL證書是否過期的實現(xiàn)示例

    Python自動檢測SSL證書是否過期的實現(xiàn)示例

    SSL證書是有有效期的,一旦過期就會失效,從而帶來安全風險,本文主要介紹了Python自動檢測SSL證書是否過期的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • 詳解基于K-means的用戶畫像聚類模型

    詳解基于K-means的用戶畫像聚類模型

    這篇文章主要介紹了基于K-means的用戶畫像聚類模型,本文中就是使用one-hot思想將不同維度的數(shù)據(jù)利用字典映射的方式將其轉(zhuǎn)化為數(shù)據(jù)向量,需要的朋友可以參考下
    2022-05-05
  • python nmap實現(xiàn)端口掃描器教程

    python nmap實現(xiàn)端口掃描器教程

    這篇文章主要為大家詳細介紹了python nmap實現(xiàn)端口掃描器教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 深入剖析Python的列表和元組

    深入剖析Python的列表和元組

    這篇文章主要介紹了深入剖析Python的列表和元組,Python有4個內(nèi)建的數(shù)據(jù)結(jié)構,它們可以統(tǒng)稱為容器,因為它們實際上是一些“東西”組合而成的結(jié)構,而這些“東西”,可以是數(shù)字、字符甚至列表,或是它們的組合,需要的朋友可以參考下
    2023-07-07
  • Python 創(chuàng)建子進程模塊subprocess詳解

    Python 創(chuàng)建子進程模塊subprocess詳解

    這篇文章主要介紹了Python 創(chuàng)建子進程模塊subprocess詳解,本文詳細講解了subprocess模塊的方法、參數(shù)、使用實例等,需要的朋友可以參考下
    2015-04-04
  • Flask?web上傳獲取圖像Image讀取并使用方式

    Flask?web上傳獲取圖像Image讀取并使用方式

    這篇文章主要介紹了Flask?web上傳獲取圖像Image讀取并使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論