網站首頁 編程語言 正文
1 前言
在 Java 和 js 中,lambda
箭頭函數是十分常見的操作,這種表達方式在使用時非常的簡便。在python
的語法中也有應用場景,lambda
是python
預留的關鍵字,帶有該關鍵字的都視為lambda
,
其表現形式如下:
# lambda 是表達式, arg 是用戶輸入參數 expression 是函數表達式 lambda [arg1 [,arg2,.....argn]]:expression
2 lambda 的特性
python 中 lambda 表達式的特性如下所示:
- 表達式是匿名的,lambda 只是一個一個表達式,類似于但是沒有名字。
- 表達式有輸入和輸出,輸入是 arg 的參數,輸出是表達式計算的結果。
- 具有命名空間,只能在命名空間之內獲取和操作參數變量。
常見的表達式如下所示:
lambda x, y: x + y # 函數輸入是x和y,輸出是 x + y lambda *args: sum(args) # 輸入是任意個數參數,輸出是多個參數的和,輸入參數必須是數字 lambda **kwargs: 2 # 輸入是任意鍵值對參數,輸出結果為固定值
3 lambda 的一些用法
3.1 map 函數
map 函數會根據提供的函數對可迭代參數進行逐個調用,并返回一個可迭代對象結果,其語法和使用方式如下所示:
# function 代表為函數,iterable 代表一個可迭代對象,也可以傳入多個對象 map(function, iterable, ...) # 只有一個可迭代參數情況 def cal_num(x): return x ** 2 + 2 * x - 3 # 準備的數據 read_list = [2, 3, 4] # 因為map 的結果是一個可迭代對象,所以轉換為 list 對象打印結果 re_list = list(map(cal_num, read_list)) #計算的結果 [5, 12, 21] print(re_list) # 多個可迭代參數情況,逐個計算和 def cal_add_num(x, y): return x + y # 準備的數據 read_list = [2, 3, 4] re_list = list(map(cal_add_num, read_list, read_list)) # 計算結果 [4, 6, 8] print(re_list) # 關于多個迭代的操作,也可以采用 zip 將多個可迭代對象進行處理,組成元組對象,進行循環計算處理。 result_list = [] for k1, k2 in zip(read_list,read_list): result_list.append(k1 + k2)
3.2 reduce 函數
reduce 函數會對參數列表中的元素進行累積計算,通常的做法就是對一列數組求和,前篇講述的 java Stream 關于 reduce 的操作和本例是一樣的,其中的 lambda 可以看成是數列的推導式:
# function 代表為函數,iterable 代表一個可迭代對象,initializer 指定起始值 reduce(function, iterable[, initializer]) # 計算數組之和,lambda 寫法,起始值為 10, 計算結果為 25 res = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5], 10)
這里需要說明的是,在 python3 中 reduce 已經從全局命名空間中移除,被放在了 functools 模塊中,如果需要使用,則需要進行引入from functools import reduce
。
3.3 sorted 函數
sorted 函數,顧名思義就是對可迭代對象進行排序操作,其語法格式和用法如下所示:
# iterable 為可迭代對象 cmp 為比較函數 排序字段和排序順序 sorted(iterable[, cmp[, key[, reverse]]]) # 1、簡單排序 a = [5,7,6,3,4,1,2] # 使用sorted,保留原列表,不改變列表a的值 # 排序結果為 [1, 2, 3, 4, 5, 6, 7] b = sorted(a) # 2、使用 lambda 指定排序函數方式排序 # 待排序對象 x_list = [('b',2),('a',1),('c',3),('d',4)] # 排序結果:[('a', 1), ('b', 2), ('c', 3), ('d', 4)] y_list = sorted(x_list, cmp=lambda x,y:cmp(x[1],y[1])) # 3、利用參數 key 排序,依然使用 lambda 指定元祖的第一個數據 # 計算結果:[('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)] # 排序結果 [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] re_list = sorted(user_list, key=lambda s: s[2], reverse=True)
3.4 filter 函數
filter 函數相對來說就比較簡單了,主要就是過濾操作,過濾掉不符合表達式的數據,得到最終的結果。
# function 為過濾函數,返回結果為 true 或者 false, iterable 為可迭代對象 filter(function, iterable) # 判斷是否為奇數 def is_odd(n): return n % 2 == 1 newlist = filter(is_odd, [1, 2, 3, 4]) print(list(newlist))
4 總結
文章主要講述了 python 的 lambda 的相關操作,主要就是 lambda 表達式與 map、filter、 sorted、 reduce 函數的配合使用。
原文鏈接:https://juejin.cn/post/7084432746960912392
相關推薦
- 2022-02-24 Oracle中decode函數用法_oracle
- 2024-02-17 BDD - Python Behave 用戶自定義配置文件
- 2022-04-10 用python實現文件備份_python
- 2022-04-10 elasticsearch + spring boot 配置
- 2022-11-16 生產redisson延時隊列不消費問題排查解決_Redis
- 2022-05-08 Python進程間的通信一起來了解下_python
- 2022-07-12 Android廣播和消息跨進程通信并返回數據
- 2023-03-11 CefSharp過濾圖片RequestHandler問題_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支