最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中l(wèi)ambda表達(dá)式的使用詳解(完整通透版)

 更新時(shí)間:2024年12月21日 09:37:16   作者:.別止步春天.  
這篇文章主要介紹了Python中l(wèi)ambda表達(dá)式使用的相關(guān)資料,包括其基本語(yǔ)法、常見應(yīng)用場(chǎng)景(如排序、map、filter、reduce函數(shù)結(jié)合使用)以及如何在函數(shù)內(nèi)部或一次性使用,通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、前言

lambda 表達(dá)式是Python中的一種簡(jiǎn)潔的匿名函數(shù)表達(dá)方式,它用于創(chuàng)建簡(jiǎn)單的函數(shù),通常在不需要定義完整函數(shù)的情況下使用。lambda 表達(dá)式的語(yǔ)法非常簡(jiǎn)潔,適合編寫一行的小函數(shù)。
接下來(lái)我們從具體的例子出發(fā),由淺入深理解如何使用lambda表達(dá)式。

二、 基本語(yǔ)法

lambda 參數(shù)1, 參數(shù)2, ... : 表達(dá)式
  • lambda 引導(dǎo)關(guān)鍵字,表示這是一個(gè)匿名函數(shù)。
  • 后面緊跟參數(shù),參數(shù)之間用逗號(hào)分隔。
  • 冒號(hào)后是函數(shù)的表達(dá)式,也就是返回值。

相當(dāng)于簡(jiǎn)寫形式的 def 函數(shù)定義。

三、舉個(gè)簡(jiǎn)單的例子:

# 普通函數(shù)
def add(x, y):
    return x + y

# 用 lambda 表達(dá)式寫成
add_lambda = lambda x, y: x + y

# 調(diào)用
print(add(2, 3))         # 輸出: 5
print(add_lambda(2, 3))  # 輸出: 5

在這個(gè)例子中,add_lambda 是一個(gè)等價(jià)于 add 的匿名函數(shù),但它使用了 lambda 表達(dá)式來(lái)定義。

四、常見應(yīng)用場(chǎng)景

1. 用于排序函數(shù)

當(dāng)我們需要排序一個(gè)包含元組、字典等復(fù)雜數(shù)據(jù)類型的列表時(shí),通常會(huì)使用 lambda 來(lái)定義排序的規(guī)則。

例如在列表的.sort排序函數(shù)的參數(shù)中,使用key=一個(gè)lambda表達(dá)式指定排序規(guī)則。

# 按照元組中的第二個(gè)元素排序
points = [(1, 2), (3, 1), (5, 4)]
points.sort(key=lambda x: x[1])
print(points)  # 輸出: [(3, 1), (1, 2), (5, 4)]

在排序函數(shù)的示例中,我們使用了 lambda 表達(dá)式和列表的 sort 方法,對(duì)一個(gè)包含元組的列表進(jìn)行排序。下面我將逐步講解這個(gè)例子的工作原理。

sort() 方法簡(jiǎn)介

sort() 是 Python 中列表的一個(gè)內(nèi)置方法,用于就地對(duì)列表進(jìn)行排序(即會(huì)直接修改原始列表)。它可以根據(jù)默認(rèn)順序(即數(shù)字從小到大,字符串按字典順序)對(duì)列表元素排序。

我們可以使用 key 參數(shù)來(lái)自定義排序規(guī)則。key 接受一個(gè)函數(shù),這個(gè)函數(shù)用于生成用于比較的值。

例如,默認(rèn)情況下,sort() 方法是基于元素的值排序:

numbers = [3, 1, 2]
numbers.sort()
print(numbers)  # 輸出: [1, 2, 3]

但是,如果我們想要按自定義規(guī)則排序,例如根據(jù)元組的某個(gè)元素(例如第二個(gè)元素)進(jìn)行排序,我們就可以使用 key 參數(shù)。

lambda 表達(dá)式的作用

在這個(gè)例子中,我們要對(duì)一個(gè)包含多個(gè)元組的列表 points 進(jìn)行排序,而排序的依據(jù)是每個(gè)元組的第二個(gè)元素(索引為1的元素)。要實(shí)現(xiàn)這個(gè)功能,我們使用 lambda 表達(dá)式:

key=lambda x: x[1]

這里 x 是列表中的每個(gè)元組,x[1] 表示元組的第二個(gè)元素。我們告訴 sort 方法,應(yīng)該根據(jù)每個(gè)元組的第二個(gè)元素來(lái)排序。

詳細(xì)解釋

  • 數(shù)據(jù)結(jié)構(gòu)points = [(1, 2), (3, 1), (5, 4)]這是一個(gè)包含三個(gè)元組的列表,每個(gè)元組包含兩個(gè)數(shù)字。例如,(1, 2) 表示一個(gè)點(diǎn)的坐標(biāo),1 是 x 坐標(biāo),2 是 y 坐標(biāo)。

  • lambda 表達(dá)式:key=lambda x: x[1]

    • x 代表列表中的每個(gè)元組。
    • x[1] 提取元組的第二個(gè)元素。
    • lambda 表達(dá)式的作用是告訴 sort 方法,只需要考慮每個(gè)元組的第二個(gè)元素進(jìn)行比較排序。
  • 排序過(guò)程

    • sort() 方法從列表的第一個(gè)元組開始,對(duì)每個(gè)元組調(diào)用 lambda x: x[1],返回第二個(gè)元素的值,作為排序的依據(jù)。

    • 對(duì)元組 (1, 2),lambda 返回 2。對(duì)元組 (3, 1),返回 1。對(duì)元組 (5, 4),返回 4

    • 然后,sort() 方法按照 124 的順序?qū)υM排序,結(jié)果是:[(3, 1), (1, 2), (5, 4)]。

  • 最終結(jié)果
    排序后的列表 points 為 [(3, 1), (1, 2), (5, 4)]。這個(gè)結(jié)果是根據(jù)每個(gè)元組的第二個(gè)元素從小到大排序的。

進(jìn)一步擴(kuò)展

如果我們想按元組的第一個(gè)元素排序,只需要將 x[1] 改為 x[0]

points.sort(key=lambda x: x[0])
print(points)  # 輸出: [(1, 2), (3, 1), (5, 4)]

如果你想實(shí)現(xiàn)降序排序,可以設(shè)置 reverse=True

points.sort(key=lambda x: x[1], reverse=True)
print(points)  # 輸出: [(5, 4), (1, 2), (3, 1)]

總結(jié)

lambda 表達(dá)式在排序函數(shù)中用于簡(jiǎn)潔地定義排序的依據(jù)。通過(guò)傳遞 key 參數(shù),我們可以輕松自定義排序規(guī)則,比如按元組中的某個(gè)特定元素排序。

2、與 map、filter、reduce 等函數(shù)結(jié)合

lambda 表達(dá)式與 mapfilter、reduce 等高階函數(shù)結(jié)合使用是 Python 編程中的一個(gè)強(qiáng)大工具。接下來(lái)我們會(huì)詳細(xì)解釋這三種函數(shù)及其結(jié)合 lambda 的用法。

1、 map() 函數(shù)

map() 函數(shù)用于對(duì)可迭代對(duì)象中的每個(gè)元素應(yīng)用一個(gè)函數(shù),并返回一個(gè)新的迭代器。它可以接受一個(gè)函數(shù)和一個(gè)或多個(gè)可迭代對(duì)象(如列表、元組)。

語(yǔ)法:

map(function, iterable)
  • function 是要應(yīng)用于每個(gè)元素的函數(shù)。
  • iterable 是可迭代對(duì)象(例如列表、元組等)。

當(dāng)結(jié)合 lambda 使用時(shí),lambda 表達(dá)式作為匿名函數(shù)傳遞給 map()

示例:將列表中的每個(gè)數(shù)字平方

nums = [1, 2, 3, 4, 5]

# 使用 lambda 表達(dá)式和 map
squared = map(lambda x: x**2, nums)

# 將結(jié)果轉(zhuǎn)換為列表并打印
print(list(squared))  # 輸出: [1, 4, 9, 16, 25]

解釋:

  • lambda x: x**2 是一個(gè)匿名函數(shù),用來(lái)計(jì)算每個(gè)數(shù)字的平方。
  • map() 函數(shù)依次將 lambda 應(yīng)用于 nums 列表中的每個(gè)元素,即 12345,然后返回每個(gè)元素平方后的結(jié)果。

等價(jià)的普通函數(shù)寫法:

def square(x):
    return x ** 2

squared = map(square, nums)
print(list(squared))  # 輸出: [1, 4, 9, 16, 25]

2、 filter() 函數(shù)

filter() 函數(shù)用于篩選可迭代對(duì)象中的元素,保留那些使函數(shù)返回 True 的元素。它也返回一個(gè)迭代器。

語(yǔ)法:

filter(function, iterable)
  • function 是用于測(cè)試每個(gè)元素的函數(shù),返回 True 或 False
  • iterable 是需要過(guò)濾的可迭代對(duì)象。

當(dāng)與 lambda 表達(dá)式結(jié)合使用時(shí),lambda 可以作為過(guò)濾條件。

示例:篩選出列表中的偶數(shù)

nums = [1, 2, 3, 4, 5]

# 使用 lambda 表達(dá)式和 filter
evens = filter(lambda x: x % 2 == 0, nums)

# 將結(jié)果轉(zhuǎn)換為列表并打印
print(list(evens))  # 輸出: [2, 4]

解釋:

  • lambda x: x % 2 == 0 是一個(gè)匿名函數(shù),用來(lái)判斷 x 是否為偶數(shù)。
  • filter() 函數(shù)依次將 lambda 應(yīng)用于 nums 列表中的每個(gè)元素,返回 True 的元素保留,返回 False 的元素被過(guò)濾掉。因此,最終結(jié)果是保留偶數(shù) 2 和 4。

等價(jià)的普通函數(shù)寫法:

def is_even(x):
    return x % 2 == 0

evens = filter(is_even, nums)
print(list(evens))  # 輸出: [2, 4]

3、 reduce() 函數(shù)

reduce() 函數(shù)用于對(duì)可迭代對(duì)象中的元素進(jìn)行累積操作,最終合并為一個(gè)值。它需要導(dǎo)入 functools 模塊,因?yàn)樗粚儆?Python 的內(nèi)置函數(shù)。

語(yǔ)法:

from functools import reduce
reduce(function, iterable)
  • function 是一個(gè)需要兩個(gè)參數(shù)的函數(shù),用來(lái)將前一個(gè)計(jì)算結(jié)果與下一個(gè)元素進(jìn)行合并。
  • iterable 是可迭代對(duì)象。

當(dāng)與 lambda 表達(dá)式結(jié)合時(shí),lambda 用來(lái)定義累積的規(guī)則。

示例:計(jì)算列表所有元素的累加和

from functools import reduce

nums = [1, 2, 3, 4, 5]

# 使用 lambda 表達(dá)式和 reduce
total = reduce(lambda x, y: x + y, nums)

print(total)  # 輸出: 15

解釋:

  • lambda x, y: x + y 是一個(gè)匿名函數(shù),接受兩個(gè)參數(shù) x 和 y,并返回它們的和。
  • reduce() 函數(shù)首先將前兩個(gè)元素 1 和 2 相加得到 3,然后將 3 和 3 相加得到 6,以此類推,直到處理完所有元素。最后返回累加結(jié)果 15。

等價(jià)的普通函數(shù)寫法:

def add(x, y):
    return x + y

total = reduce(add, nums)
print(total)  # 輸出: 15

總結(jié)

  • map():對(duì)每個(gè)元素應(yīng)用函數(shù),返回每個(gè)元素的變換結(jié)果。適合批量操作。
  • filter():根據(jù)條件過(guò)濾元素,保留符合條件的元素。
  • reduce():對(duì)序列中的元素進(jìn)行累積操作,適合需要?dú)w約為單一值的場(chǎng)景。

lambda 表達(dá)式可以方便地與這些高階函數(shù)結(jié)合,減少代碼的冗余和函數(shù)的顯式定義。

3、 用于函數(shù)內(nèi)部或一次性使用的函數(shù)

當(dāng)函數(shù)只需要使用一次,可以直接用 lambda 表達(dá)式,而無(wú)需定義新的函數(shù)名。

def apply_operation(x, operation):
    return operation(x)

# 使用 lambda 傳遞匿名函數(shù)
result = apply_operation(5, lambda x: x * 2)
print(result)  # 輸出: 10

五、總結(jié)

lambda 表達(dá)式用于簡(jiǎn)化代碼,尤其適用于短小的函數(shù),避免顯式定義完整函數(shù)。雖然它方便,但當(dāng)函數(shù)較為復(fù)雜時(shí),還是建議使用普通函數(shù)定義,以提高代碼的可讀性。

到此這篇關(guān)于Python中l(wèi)ambda表達(dá)式的使用詳解的文章就介紹到這了,更多相關(guān)Python中l(wèi)ambda表達(dá)式使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python執(zhí)行時(shí)間的計(jì)算方法小結(jié)

    Python執(zhí)行時(shí)間的計(jì)算方法小結(jié)

    這篇文章主要介紹了Python執(zhí)行時(shí)間的計(jì)算方法小結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Flask中Cookie和Session理解與作用介紹

    Flask中Cookie和Session理解與作用介紹

    Flask是一個(gè)使用 Python 編寫的輕量級(jí) Web 應(yīng)用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權(quán)。Flask也被稱為 “microframework” ,因?yàn)樗褂煤?jiǎn)單的核心,用 extension 增加其他功能,F(xiàn)lask中Cookie和Session有什么區(qū)別呢
    2022-10-10
  • Python多進(jìn)程加鎖的實(shí)現(xiàn)

    Python多進(jìn)程加鎖的實(shí)現(xiàn)

    很多時(shí)候,我們需要在多個(gè)進(jìn)程中同時(shí)寫一個(gè)文件,如果不加鎖機(jī)制,就會(huì)導(dǎo)致寫文件錯(cuò)亂,本文主要介紹了Python多進(jìn)程加鎖的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),感興趣的可以了解一下
    2023-07-07
  • Python中使用PyMySQL模塊的方法詳解

    Python中使用PyMySQL模塊的方法詳解

    Python中的pymysql模塊是用于連接MySQL數(shù)據(jù)庫(kù)的一個(gè)第三方庫(kù),它提供了一套API,使得Python程序員能夠方便地執(zhí)行SQL語(yǔ)句、操作數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于Python中使用PyMySQL模塊的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • python學(xué)習(xí)教程之socket庫(kù)的基本使用(網(wǎng)絡(luò)編程-套接字)

    python學(xué)習(xí)教程之socket庫(kù)的基本使用(網(wǎng)絡(luò)編程-套接字)

    Python中的socket模塊提供了網(wǎng)絡(luò)編程中的套接字(socket)功能,通過(guò)套接字我們可以實(shí)現(xiàn)不同計(jì)算機(jī)之間的通信,這篇文章主要給大家介紹了關(guān)于python學(xué)習(xí)教程之socket庫(kù)的基本使用,需要的朋友可以參考下
    2024-07-07
  • Python+OpenCV采集本地?cái)z像頭的視頻

    Python+OpenCV采集本地?cái)z像頭的視頻

    這篇文章主要為大家詳細(xì)介紹了Python+OpenCV采集本地?cái)z像頭的視頻,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Centos安裝Python虛擬環(huán)境及配置方法

    Centos安裝Python虛擬環(huán)境及配置方法

    這篇文章主要介紹了Centos安裝Python虛擬環(huán)境及配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 在Flask使用TensorFlow的幾個(gè)常見錯(cuò)誤及解決

    在Flask使用TensorFlow的幾個(gè)常見錯(cuò)誤及解決

    這篇文章主要介紹了在Flask使用TensorFlow的幾個(gè)常見錯(cuò)誤及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • pandas中DataFrame排序及分組排序的實(shí)現(xiàn)示例

    pandas中DataFrame排序及分組排序的實(shí)現(xiàn)示例

    本文主要介紹了pandas中DataFrame排序及分組排序,pandas中的sort_values()函數(shù)原理類似于SQL中的order by,可以將數(shù)據(jù)集依照某個(gè)字段中的數(shù)據(jù)進(jìn)行排序,下面就來(lái)具體介紹一下,感興趣的可以了解一下
    2024-04-04
  • Python必備技巧之字符數(shù)據(jù)操作詳解

    Python必備技巧之字符數(shù)據(jù)操作詳解

    處理字符數(shù)據(jù)是編程不可或缺的一部分。Python?提供了一組豐富的運(yùn)算符、函數(shù)和方法來(lái)處理字符串。包括字符串運(yùn)算符、內(nèi)置函數(shù)、索引、切片和內(nèi)置方法??靵?lái)學(xué)習(xí)一下吧
    2022-03-03

最新評(píng)論

澜沧| 满洲里市| 美姑县| 随州市| 苍南县| 菏泽市| 镇远县| 庆安县| 南阳市| 洛扎县| 九龙坡区| 磴口县| 依安县| 兴山县| 鄢陵县| 梓潼县| 津南区| 老河口市| 嵊泗县| 乳源| 普安县| 建瓯市| 新民市| 奎屯市| 漳州市| 汝州市| 同德县| 江华| 东乡县| 光泽县| 花垣县| 商河县| 临桂县| 新河县| 科技| 会宁县| 迁西县| 和顺县| 佛教| 蒲江县| 东阳市|