網(wǎng)站首頁 編程語言 正文
1 前言
在 Java 和 js 中,lambda
箭頭函數(shù)是十分常見的操作,這種表達(dá)方式在使用時非常的簡便。在python
的語法中也有應(yīng)用場景,lambda
是python
預(yù)留的關(guān)鍵字,帶有該關(guān)鍵字的都視為lambda
,
其表現(xiàn)形式如下:
# lambda 是表達(dá)式, arg 是用戶輸入?yún)?shù) expression 是函數(shù)表達(dá)式 lambda [arg1 [,arg2,.....argn]]:expression
2 lambda 的特性
python 中 lambda 表達(dá)式的特性如下所示:
- 表達(dá)式是匿名的,lambda 只是一個一個表達(dá)式,類似于但是沒有名字。
- 表達(dá)式有輸入和輸出,輸入是 arg 的參數(shù),輸出是表達(dá)式計算的結(jié)果。
- 具有命名空間,只能在命名空間之內(nèi)獲取和操作參數(shù)變量。
常見的表達(dá)式如下所示:
lambda x, y: x + y # 函數(shù)輸入是x和y,輸出是 x + y lambda *args: sum(args) # 輸入是任意個數(shù)參數(shù),輸出是多個參數(shù)的和,輸入?yún)?shù)必須是數(shù)字 lambda **kwargs: 2 # 輸入是任意鍵值對參數(shù),輸出結(jié)果為固定值
3 lambda 的一些用法
3.1 map 函數(shù)
map 函數(shù)會根據(jù)提供的函數(shù)對可迭代參數(shù)進(jìn)行逐個調(diào)用,并返回一個可迭代對象結(jié)果,其語法和使用方式如下所示:
# function 代表為函數(shù),iterable 代表一個可迭代對象,也可以傳入多個對象 map(function, iterable, ...) # 只有一個可迭代參數(shù)情況 def cal_num(x): return x ** 2 + 2 * x - 3 # 準(zhǔn)備的數(shù)據(jù) read_list = [2, 3, 4] # 因為map 的結(jié)果是一個可迭代對象,所以轉(zhuǎn)換為 list 對象打印結(jié)果 re_list = list(map(cal_num, read_list)) #計算的結(jié)果 [5, 12, 21] print(re_list) # 多個可迭代參數(shù)情況,逐個計算和 def cal_add_num(x, y): return x + y # 準(zhǔn)備的數(shù)據(jù) read_list = [2, 3, 4] re_list = list(map(cal_add_num, read_list, read_list)) # 計算結(jié)果 [4, 6, 8] print(re_list) # 關(guān)于多個迭代的操作,也可以采用 zip 將多個可迭代對象進(jìn)行處理,組成元組對象,進(jìn)行循環(huán)計算處理。 result_list = [] for k1, k2 in zip(read_list,read_list): result_list.append(k1 + k2)
3.2 reduce 函數(shù)
reduce 函數(shù)會對參數(shù)列表中的元素進(jìn)行累積計算,通常的做法就是對一列數(shù)組求和,前篇講述的 java Stream 關(guān)于 reduce 的操作和本例是一樣的,其中的 lambda 可以看成是數(shù)列的推導(dǎo)式:
# function 代表為函數(shù),iterable 代表一個可迭代對象,initializer 指定起始值 reduce(function, iterable[, initializer]) # 計算數(shù)組之和,lambda 寫法,起始值為 10, 計算結(jié)果為 25 res = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5], 10)
這里需要說明的是,在 python3 中 reduce 已經(jīng)從全局命名空間中移除,被放在了 functools 模塊中,如果需要使用,則需要進(jìn)行引入from functools import reduce
。
3.3 sorted 函數(shù)
sorted 函數(shù),顧名思義就是對可迭代對象進(jìn)行排序操作,其語法格式和用法如下所示:
# iterable 為可迭代對象 cmp 為比較函數(shù) 排序字段和排序順序 sorted(iterable[, cmp[, key[, reverse]]]) # 1、簡單排序 a = [5,7,6,3,4,1,2] # 使用sorted,保留原列表,不改變列表a的值 # 排序結(jié)果為 [1, 2, 3, 4, 5, 6, 7] b = sorted(a) # 2、使用 lambda 指定排序函數(shù)方式排序 # 待排序?qū)ο? x_list = [('b',2),('a',1),('c',3),('d',4)] # 排序結(jié)果:[('a', 1), ('b', 2), ('c', 3), ('d', 4)] y_list = sorted(x_list, cmp=lambda x,y:cmp(x[1],y[1])) # 3、利用參數(shù) key 排序,依然使用 lambda 指定元祖的第一個數(shù)據(jù) # 計算結(jié)果:[('a', 1), ('b', 2), ('c', 3), ('d', 4)] z_list = sorted(x_list, key=lambda x:x[1]) # 4、指定排序順序 user_list = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] # 排序結(jié)果 [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] re_list = sorted(user_list, key=lambda s: s[2], reverse=True)
3.4 filter 函數(shù)
filter 函數(shù)相對來說就比較簡單了,主要就是過濾操作,過濾掉不符合表達(dá)式的數(shù)據(jù),得到最終的結(jié)果。
# function 為過濾函數(shù),返回結(jié)果為 true 或者 false, iterable 為可迭代對象 filter(function, iterable) # 判斷是否為奇數(shù) def is_odd(n): return n % 2 == 1 newlist = filter(is_odd, [1, 2, 3, 4]) print(list(newlist))
4 總結(jié)
文章主要講述了 python 的 lambda 的相關(guān)操作,主要就是 lambda 表達(dá)式與 map、filter、 sorted、 reduce 函數(shù)的配合使用。
原文鏈接:https://juejin.cn/post/7084432746960912392
相關(guān)推薦
- 2022-06-01 C語言?超詳細(xì)梳理總結(jié)動態(tài)內(nèi)存管理_C 語言
- 2023-07-08 vs編譯運行報錯:未聲明的標(biāo)識符
- 2022-04-11 MVVMLight項目Model?View結(jié)構(gòu)及全局視圖模型注入器_Android
- 2022-04-08 go實現(xiàn)圖片拼接與文字書寫的方法實例_Golang
- 2023-07-14 echarts圖表進(jìn)度條類型圖
- 2023-11-20 Linux/樹莓派如何限制CPU使用率?cpulimit的基本用法
- 2024-01-15 mybatis中@Results,@ResultMap注解使用
- 2022-08-19 ubuntu上設(shè)置Redis開機(jī)自啟
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支