【python】python進階——Lambda 函數

目錄

引言

一、簡介

1.1 基本語法

1.2 優勢

1.3 局限性

二、基本用法

2.1 無參數lambda 函數

2.2 多參數 lambda 函數

三、常見使用場景

3.1 與高階函數配合使用

3.2 作為排序鍵

3.3 在 GUI 編程中作為回調函數

3.4?在 Pandas 中的應用

四、高級技巧

4.1 條件表達式

4.2 嵌套 Lambda 函數

4.3 默認參數

總結


引言

????????Python 中的 lambda 函數是一種創建匿名函數(沒有名稱的函數)的方式,它可以使代碼更加簡潔和易讀。雖然功能有限,但在適當的場景下,lambda 函數能大大簡化代碼結構。

一、簡介

1.1 基本語法

Lambda 函數是使用 lambda 關鍵字創建的匿名函數,其基本語法如下:

lambda arg1, arg2 : expression

參數:

  • lambda:定義 lambda 函數的關鍵字

  • arg:函數參數,可以是零個或多個,用逗號分隔

  • expression:函數體,只能是一個表達式,不能包含多條語句

1.2 Lambda 函數的優勢

  • 當函數只需要使用一次時

  • 當函數體非常簡單,只有一條表達式時

  • 作為參數傳遞給高階函數時

1.3 Lambda 函數的局限性

  • 只能包含一個表達式:Lambda 函數不能包含多條語句或復雜的邏輯結構。

  • 沒有語句:不能包含 ifforwhile 等語句(但可以使用條件表達式)。

  • 可讀性:過于復雜的 lambda 函數會降低代碼的可讀性。

二、基本用法

2.1 無參數的 lambda 函數

# 普通函數定義
def square(x):print("hello world!")
?
# 等效的 lambda 函數
square = lambda : print("hello world!")

2.2 多參數的 lambda 函數

# 普通函數
def add(x, y):return x + y
?
# 等效的 lambda 函數
add = lambda x, y: x + y
?
print(add(3, 5))  # 輸出: 8

三、常見使用場景

3.1 與高階函數配合使用

Lambda 函數經常與 map(), filter(), reduce() 等高階函數一起使用。

  • 使用 map()
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # 輸出: [1, 4, 9, 16, 25]
  • 使用 filter()
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 輸出: [2, 4, 6, 8, 10]
  • 使用 reduce()
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 輸出: 120

3.2 作為排序鍵

# 按姓名排序
students = [{'name': 'Alice', 'age': 25},{'name': 'Bob', 'age': 22},{'name': 'Charlie', 'age': 28}
]
?
# 按姓名排序
students_sorted_by_name = sorted(students, key=lambda x: x['name'])
print(students_sorted_by_name)
# 輸出: [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 22}, {'name': 'Charlie', 'age': 28}]
?
# 按年齡排序
students_sorted_by_age = sorted(students, key=lambda x: x['age'])
print(students_sorted_by_age)
# 輸出: [{'name': 'Bob', 'age': 22}, {'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 28}]

3.3 在 GUI 編程中作為回調函數

import tkinter as tk
?
root = tk.Tk()
button = tk.Button(root, text="Click me!", command=lambda: print("Button clicked!"))
button.pack()
root.mainloop()

3.4?在 Pandas 中的應用

import pandas as pd
?
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# 創建新列,其值為 A 列和 B 列的和
df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
print(df)

四、高級技巧

4.1 條件表達式

# 返回兩個數中較大的數
max_value = lambda x, y: x if x > y else y
print(max_value(10, 20))  # 輸出: 20

4.2 嵌套 Lambda 函數

# 返回一個函數,該函數計算 x 的 n 次方
power = lambda n: lambda x: x ** n
?
square = power(2)
cube = power(3)
?
print(square(4))  # 輸出: 16
print(cube(3)) ?  # 輸出: 27

4.3 默認參數

greet = lambda name, greeting="Hello": f"{greeting}, {name}!"
print(greet("Alice")) ? ? ? ?  # 輸出: Hello, Alice!
print(greet("Bob", "Hi")) ? ?  # 輸出: Hi, Bob!

總結

????????Lambda 函數是 Python 中一個強大而簡潔的特性,當正確使用時,可以使代碼更加簡潔和易讀。它們特別適合與高階函數配合使用,或者作為簡單的回調函數。

????????然而,重要的是要記住,lambda 函數并不總是最佳選擇,特別是當邏輯變得復雜時。如在這些情況下,使用傳統的 def 關鍵字定義函數通常是更好的選擇:

  • 當函數邏輯復雜,需要多條語句時

  • 當函數需要文檔字符串或注釋時

  • 當函數會被多次重用時

選擇使代碼最清晰、最易維護的方法,而不是一味追求簡潔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95066.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于單片機電動車充電樁/充電車棚環境監測設計

傳送門 👉👉👉👉其他作品題目速選一覽表 👉👉👉👉其他作品題目功能速覽 概述 隨著電動車普及,充電樁的環境安全監測成為重要課題。基于單片機的電動車充電樁環境檢…

Linux初始——編譯器gcc

編譯器gcc編譯器編譯器自舉動靜態庫動靜態庫的差異gcc編譯器 眾所周知,代碼運行的前提是經過四個步驟的 預處理,其進行宏替換,去注釋,條件編譯,頭文件展開的工作,在gcc的選項中對應gcc -E,其就…

Three.js + AI預測:在數字孿生中實現數據可視化智能決策

某智慧工廠的數字孿生系統曾陷入尷尬:3D 模型里的生產線數據實時跳動,卻沒人能預判 “2 小時后哪臺機器會停機”。這就像有了高清監控,卻不會分析監控畫面 ——Three.js 做出的可視化是 “眼睛”,AI 預測才是 “大腦”。不少團隊用…

刀客doc:亞馬遜持續猛攻程序化廣告

文/刀客doc(頭條深一度精選作者)一7月的尾聲和8月的開端,廣告市場見證了兩場截然不同的場面。7月31日,亞馬遜公布了截至6月30日的2025年第二季度財報。廣告業務表現尤為亮眼:單季收入達到157億美元,同比增長約22%,成為…

政府網站IPv6檢測怎么做?檢測指標有哪些?

隨著信息技術的飛速發展,IPv6作為下一代互聯網的核心協議,已成為全球互聯網發展的必然趨勢。我國政府高度重視IPv6的規模部署和應用推廣,明確要求各級政府網站必須完成IPv6改造,以提升網絡基礎設施的現代化水平,增強網…

有N個控制點的三次B樣條曲線轉化為多段三階Bezier曲線的方法

將具有N 個控制點的三次B樣條曲線轉換為多段三階Bezier曲線,是計算機圖形學和CAD系統中常見的操作。這種轉換基于B樣條曲線的局部性質以及其與Bezier曲線之間的關系。基本原理三次B樣條曲線由一組控制點 P?, P?, ..., P??? 和一個節點向量 U {u?, u?, ..., …

chrome好用的瀏覽器插件

https://ad.infread.com/?utm_sourcebaidu_sem&utm_mediumweb_pc&utm_campaignkeywords_website_translate&bd_vid2831968530895394443 目前我自己覺得比較用的谷歌瀏覽器翻譯插件->沉浸式翻譯 個人覺得無論時速度還是準確度都是比較好的

k8s---prometheus 監控

目錄 環境準備 下載 kube-prometheus 軟件包 下載prometheus 鏡像 master節點 master節點導入prometheus軟件包 解壓 node節點 node節點導入鏡像 解壓 從tar包中加載鏡像 部署 prometheus 修改映射端口 提交 查看pod pod和svc正常啟動 deployment daemonset se…

華大時空組學空轉圖像處理

華大時空組學空轉圖像處理 library(png) library(tiff) st <- readRDS(01.Stereo-seq/output_all/Demo_Mouse_Kidney/outs/feature_expression/seurat_out.rds) dim(stassays$Spatialcounts) stassays$Spatialcounts[1:4,1:4] coord.df <- data.frame(imagerow st$x, im…

如何在SptingBoot項目中引入swagger生成API文檔

目錄 背景介紹&#xff0c;swagger的必要性 swagger的引入&#xff1a; 1.首先我們需要在 pom.xml文件中導入jar包 2.給swagger創建一個配置類&#xff1a; 3.為實體類添加注解 4.為controller添加注解 背景介紹&#xff0c;swagger的必要性 自從在2005年前端工程師誕生之…

GD32入門到實戰21--輸入捕獲

我們新建capture_drv.c#include <stdint.h> #include <stdio.h> #include "gd32f30x.h" #include "delay.h"static void GpioInit(void) {rcu_periph_clock_enable(RCU_GPIOA);gpio_init(GPIOA,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_10MHZ,GPIO…

MyBatis 與 MyBatis-Plus 的對比與選擇

&#x1f50d; MyBatis 與 MyBatis-Plus 的對比與選擇 文章目錄&#x1f50d; MyBatis 與 MyBatis-Plus 的對比與選擇&#x1f9e0; 一、MyBatis 核心回顧&#x1f4a1; 核心思想與架構定位? 基礎使用示例?? MyBatis 的痛點? 二、MyBatis-Plus 功能特性解析&#x1f4a1; M…

大數據-湖倉一體

數據倉庫 這是一個傳統的概念了&#xff0c;趨向于結構化數據&#xff0c;簡單來說就是進過數據治理后的標準數據更易于數據分析使用&#xff0c;代價就是存儲比較昂貴了 數據湖 近些年來新出的一種概念&#xff0c;就是存儲了結構化&#xff0c;非結構化&#xff0c;半結構…

Java視覺跟蹤入門:使用OpenCV實現實時對象追蹤

視覺跟蹤是計算機視覺領域的一個重要分支&#xff0c;它允許我們在視頻序列中持續定位移動對象。本文將介紹如何使用Java和OpenCV庫來實現一個簡單的視覺跟蹤系統。什么是視覺跟蹤&#xff1f;視覺跟蹤是指通過分析視頻幀來自動追蹤一個或多個移動對象的過程。這項技術廣泛應用…

【題解 | 兩種做法】洛谷 P4208 [JSOI2008] 最小生成樹計數 [矩陣樹/枚舉]

特別難調&#xff0c;洛谷題解區很多人代碼可讀性不強&#xff0c;做的我懷疑人生。 &#xff08;雖然我的碼風也一般就是了&#xff09; 前置知識&#xff1a; Kruskal 求最小生成樹。 題面&#xff1a; 洛谷 P4208 兩種做法&#xff0c;一種矩陣樹一種枚舉。 &#xff08…

光譜相機多層鍍膜技術如何提高透過率

光譜相機多層鍍膜技術通過精密的光學設計與材料組合實現透過率提升&#xff0c;其核心原理與技術特性如下&#xff1a;一、多層鍍膜的光學優化機制?復合相位調控? 通過交替沉積高折射率&#xff08;如TiO?, n2.3&#xff09;與低折射率材料&#xff08;如SiO?, n1.46&#…

ubantu安裝配置hive

在Ubuntu系統上安裝Hive通常涉及幾個步驟&#xff0c;包括安裝Java&#xff08;因為Hive依賴于Java&#xff09;&#xff0c;安裝Hadoop&#xff0c;然后安裝Hive本身。以下是一個基本的步驟指南&#xff1a; 安裝Java 首先&#xff0c;確保你的系統上安裝了Java。你可以通過運…

大模型RAG項目實戰:文本向量模型>Embedding模型、Reranker模型以及ColBERT模型

注&#xff1a;此文章內容均節選自充電了么創始人&#xff0c;CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》&#xff08;跟我一起學人工智能&#xff09;【陳敬雷編著】【清華大學出版社】 清華《GPT多模態大模型與AI Agent智能體》書籍配套視頻課程【陳敬雷…

基于uni-app的校園綜合服務平臺開發實戰

閃遞校園&#xff1a;基于uni-app的校園綜合服務平臺開發實戰作為一名全棧開發者&#xff0c;我用6個月時間開發了這款校園綜合服務平臺——閃遞校園。本文將詳細分享項目從0到1的開發經驗&#xff0c;包括技術選型、核心功能實現、踩坑記錄以及性能優化等方面的干貨內容。&…

Qt::Q_INIT_RESOURCE用法

q_init_resource 用法 q_init_resource 是 Qt 框架中用于初始化嵌入式資源的一個函數。它通常用于將編譯到應用程序二進制文件中的資源&#xff08;如圖像、QML文件、翻譯文件等&#xff09;注冊到Qt的資源系統中。 基本用法 cpp Q_INIT_RESOURCE(resourcename); 其中 resource…