小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python學(xué)習(xí)筆記 | 匿名函數(shù)lambda、映射函數(shù)map和過(guò)濾函數(shù)filter

 網(wǎng)摘文苑 2022-11-24 發(fā)布于新疆

什么是匿名函數(shù)?

定義:沒(méi)有函數(shù)名的自定義函數(shù)
場(chǎng)景:函數(shù)體非常簡(jiǎn)單,使用次數(shù)很少,沒(méi)有必要聲明函數(shù),通常搭配高階函數(shù)使用。
高階函數(shù)是能夠把函數(shù)當(dāng)成參數(shù)進(jìn)行傳遞的函數(shù),如:映射函數(shù)map和過(guò)濾函數(shù)filter。
格式:lambda 參數(shù):返回值(參數(shù)可以是多個(gè),返回值就是函數(shù)體,必須得有)

文章圖片1

首先用一個(gè)簡(jiǎn)單的實(shí)例——求給定半徑的圓面積,來(lái)剖析一下匿名函數(shù)的應(yīng)用場(chǎng)景。

  • 使用普通自定義函數(shù)
def circular_area(r): result = 3.14 * r * r return resultprint('半徑為{}的圓面積是{}'.format(10, circular_area(10)))輸出結(jié)果:半徑為10的圓面積是314.0
  • 使用匿名函數(shù)
area = lambda r: 3.14 * r * rprint('半徑為{}的圓面積是{}'.format(10, area(10)))輸出結(jié)果:半徑為10的圓面積是314.0

通過(guò)對(duì)比可以發(fā)現(xiàn),匿名函數(shù)不需要預(yù)先定義,直接把函數(shù)體寫(xiě)在一行代碼內(nèi),隨用隨寫(xiě)、靈活方便,避免過(guò)多定義函數(shù),增加閱讀量。

實(shí)例分析匿名函數(shù)寫(xiě)法

  • 一行代碼對(duì)包含元組元素的列表進(jìn)行排序
# 對(duì)下面list1按照年齡排序list1 = [('張三', 22), ('李四', 18), ('王五', 24), ('趙六', 16)]# 使用lambda配合內(nèi)置函數(shù)sorted的key參數(shù)進(jìn)行排序,生成新列表list2 = sorted(list1, key=lambda x: x[1])print(list2)輸出結(jié)果:[('趙六', 16), ('李四', 18), ('張三', 22), ('王五', 24)]# 也可以使用列表的sort方法進(jìn)行排序,不生成新列表list1.sort(key=lambda x: x[1], reverse=True)print(list1)輸出結(jié)果:[('王五', 24), ('張三', 22), ('李四', 18), ('趙六', 16)]
  • 一行代碼對(duì)字典進(jìn)行排序
dict1 = {'張三': 90, '李四': 85, '王五': 80, '趙六': 92}result = sorted(dict1.items(), key=lambda x: x[1])print(dict(result))輸出結(jié)果:{'王五': 80, '李四': 85, '張三': 90, '趙六': 92}
  • 匿名函數(shù)配合映射函數(shù)map使用

映射函數(shù)格式:map(函數(shù),可迭代參數(shù))

# 下面使用匿名函數(shù)配合map(映射函數(shù)),求一個(gè)列表的所有元素的平方值,并生成新列表m1 = map(lambda x: x ** 2, [1, 2, 3, 4, 5])print(m1)輸出結(jié)果:<map object at 0x0000022866FDBF70># 通過(guò)結(jié)果可以看到,映射函數(shù)的返回值是一個(gè)映射對(duì)象地址# 使用list函數(shù)把映射結(jié)果轉(zhuǎn)換成列表m2 = list(m1)print(m2)輸出結(jié)果:[1, 4, 9, 16, 25]# 由此可以看出,map函數(shù)是通過(guò)函數(shù)參數(shù)和可迭代參數(shù)映射出一個(gè)新的可迭代數(shù)據(jù)# 利用map函數(shù),將已知列表里的字符串首字母變成大寫(xiě)names = ['jack', 'tom', 'ribo', 'jekiiy']m1 = map(lambda x: x.capitalize(), names)result = list(m1)print(result)輸出結(jié)果:['Jack', 'Tom', 'Ribo', 'Jekiiy']
  • 匿名函數(shù)配合過(guò)濾函數(shù)filter使用

過(guò)濾函數(shù)格式:filter(函數(shù),可迭代參數(shù))

# 利用過(guò)濾函數(shù)filter將列表中的空值過(guò)濾掉,0是空值,負(fù)數(shù)不算空值numbers = [3, 8, 0, -2, 9, 15, -1, 0, 45]# filter第一個(gè)參數(shù)為None時(shí),就代表過(guò)濾空值result = filter(None, numbers)  print(list(result))輸出結(jié)果:[3, 8, -2, 9, 15, -1, 45]# 利用filter和lambda過(guò)濾掉奇數(shù),形成一個(gè)新的偶數(shù)列表numbers = [3, 8, 0, -2, 9, 15, -1, 0, 45]result = filter(lambda x: x % 2 == 0, numbers)print(list(result))輸出結(jié)果:[8, 0, -2, 0]# 利用filter和lambda把列表中的數(shù)字過(guò)濾出來(lái)list1 = ['abc', 98, '34', 0, 9, 'uiy', 'jike', -5]result = filter(lambda x: type(x) == int, list1)print(list(result))輸出結(jié)果:[98, 0, 9, -5]# 利用過(guò)濾函數(shù)把列表中的數(shù)字和字符串型的數(shù)字過(guò)濾出來(lái)list1 = ['abc', 98, '34', 0, 9, 'uiy', 'jike', -5]result = filter(lambda x: isinstance(x, int) or x.isdigit(), list1)print(list(result))輸出結(jié)果:[98, '34', 0, 9, -5]# 利用過(guò)濾函數(shù)將字典里成績(jī)大于90的學(xué)生數(shù)據(jù)過(guò)濾出來(lái)dict1 = {'張三': 90, '李四': 85, '王五': 80, '趙六': 92, '田七': 75, '周八': 100}result = filter(lambda x: x[1] >= 90, dict1.items())print(dict(result))輸出結(jié)果:{'張三': 90, '趙六': 92, '周八': 100}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多