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

如何寫好?Python?的?Lambda?函數(shù)

 更新時間:2022年03月30日 09:51:07   作者:Python研究者  
這篇文章主要介紹了如何寫好?Python?的?Lambda?函數(shù),Lambda?函數(shù)是?Python?中的匿名函數(shù),下面文章通過介紹Lambda?函數(shù)的相關(guān)內(nèi)容展開文章主題,需要的小伙伴可以參考一下

前言:

Lambda 函數(shù)是 Python 中的匿名函數(shù)。當(dāng)你需要完成一件小工作時,在本地環(huán)境中使用它們可以讓工作得心應(yīng)手。有些人將它們簡稱為 lambdas,它們的語法如下:

lambda arguments: expression

lambda 關(guān)鍵字可以用來創(chuàng)建一個 lambda 函數(shù),緊跟其后的是參數(shù)列表和用冒號分割開的單個表達式。例如,lambda x: 2 * x 是將任何輸入的數(shù)乘2,而 lambda x, y: x+y 是計算兩個數(shù)字的和。語法十分直截了當(dāng),對吧?

假設(shè)您知道什么是 lambda 函數(shù),本文旨在提供有關(guān)如何正確使用 lambda 函數(shù)的一些常規(guī)準(zhǔn)則。

1. 不要返回任何值

看看語法,您可能會注意到我們在 lambda 函數(shù)中并沒有返回任何內(nèi)容。這都是因為 lambda 函數(shù)只能包含一個表達式。然而,使用 return 關(guān)鍵字會構(gòu)成不符合規(guī)定語法的語句,如下所示:

>>> integers = [(3, -3), (2, 3), (5, 1), (-4, 4)]
>>> sorted(integers, key=lambda x: x[-1])
[(3, -3), (5, 1), (2, 3), (-4, 4)]
>>> sorted(integers, key=lambda x: return x[-1])
...?
? File "<input>", line 1
? ? sorted(integers, key=lambda x: return x[-1])
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^
SyntaxError: invalid syntax

該錯誤可能是由于無法區(qū)分表達式和語句而引起的。像是包含 return、try、 with 以及 if 的語句會執(zhí)行特殊動作。然而,表達式指的是那些可以被計算出一個值的表達,例如數(shù)值或其他 Python 對象。

通過使用 lambda 函數(shù),單個表達式會被計算為一個值并且參與后續(xù)的計算,例如由 sorted 函數(shù)排序。

2. 不要忘記更好的選擇

lambda 函數(shù)最常見的使用場景是將它作為一些內(nèi)置工具函數(shù)中 key 的實參,比如上面展示的 sorted() 和 max()。根據(jù)情況,我們可以使用其他替代方法。

思考下面的例子:

>>> integers = [-4, 3, 7, -5, -2, 6]
>>> sorted(integers, key=lambda x: abs(x))
[-2, 3, -4, -5, 6, 7]
>>> sorted(integers, key=abs)
[-2, 3, -4, -5, 6, 7]
>>> scores = [(93, 100), (92, 99), (95, 94)]
>>> max(scores, key=lambda x: x[0] + x[1])
(93, 100)
>>> max(scores, key=sum)
(93, 100)

在數(shù)據(jù)科學(xué)領(lǐng)域,很多人使用 pandas 庫來處理數(shù)據(jù)。如下所示,我們可以使用 lambda 函數(shù)通過 map() 函數(shù)從現(xiàn)有數(shù)據(jù)中創(chuàng)建新數(shù)據(jù)。除了使用 lambda 函數(shù)外,我們還可以直接使用算術(shù)函數(shù),因為 pandas 是支持的:

>>> import pandas as pd
>>> data = pd.Series([1, 2, 3, 4])
>>> data.map(lambda x: x + 5)
0 ? ?6
1 ? ?7
2 ? ?8
3 ? ?9
dtype: int64
>>> data + 5
0 ? ?6
1 ? ?7
2 ? ?8
3 ? ?9
dtype: int64

3. 不要將它賦值給變量

我曾見過一些人將 lambda 函數(shù)誤認為是簡單函數(shù)的另一種聲明方式,我們可能也見過有人像下面這么做:

>>> doubler = lambda x: 2 * x
>>> doubler(5)
10
>>> doubler(7)
14
>>> type(doubler)
<class 'function'>

對 lambda 函數(shù)命名的唯一作用可能是出于教學(xué)目的,以表明 lambda 函數(shù)的確是和其他函數(shù)一樣的函數(shù)——可以被調(diào)用并且具有某種功能。除此之外,我們不應(yīng)該將 lambda 函數(shù)賦值給變量。

為 lambda 函數(shù)命名的問題在于這使得調(diào)試不那么直觀。與其他的使用常規(guī) def 關(guān)鍵字創(chuàng)建的函數(shù)不同,lambda 函數(shù)沒有名字,這也是為什么有時它們被稱為匿名函數(shù)的原因。思考下面簡單的例子,找出細微的區(qū)別:

>>> inversive0 = lambda x: 1 / x
>>> inversive0(2)
0.5
>>> inversive0(0)
Traceback (most recent call last):
? File "<input>", line 1, in <module>
? File "<input>", line 1, in <lambda>
ZeroDivisionError: division by zero
>>> def inversive1(x):
... ? ? return 1 / x
...?
>>> inversive1(2)
0.5
>>> inversive1(0)
Traceback (most recent call last):
? File "<input>", line 1, in <module>
? File "<input>", line 2, in inversive1
ZeroDivisionError: division by zero

當(dāng)我們的代碼存在關(guān)于 lambda 函數(shù)的問題(即 inversive0),Traceback 錯誤信息只會提示您 lambda 函數(shù)存在問題。

相比之下,使用正常定義的函數(shù),Traceback會清晰地提示您有問題的函數(shù)(即 inversive1)。

與此相關(guān),如果您想多次使用 lambda 函數(shù),最佳實踐是使用通過 def 定義的允許使用文檔字符串的常規(guī)函數(shù)。

4. 不要忘記列表推導(dǎo)式

有些人喜歡將 lambda 函數(shù)和高階函數(shù)一起使用,比如 map 或 filter。思考下面用法示例:

>>> # 創(chuàng)建一個數(shù)字列表
>>> numbers = [2, 1, 3, -3]
>>> # 使用帶有 lambda 函數(shù)的 map 函數(shù)
>>> list(map(lambda x: x * x, numbers))
[4, 1, 9, 9]
>>> # 使用帶有 lambda 函數(shù)的 filter 函數(shù)
>>> list(filter(lambda x: x % 2, numbers))
[1, 3, -3]

我們可以使用可讀性更強的列表推導(dǎo)式代替 lambda 函數(shù)。如下所示,我們使用列表推導(dǎo)式來創(chuàng)建相同的列表對象。如所見,與列表推導(dǎo)式相比,之前將 map 或 filter 函數(shù)與 lambda 函數(shù)一起使用更麻煩。因此,在創(chuàng)建涉及高階函數(shù)的列表時,應(yīng)考慮使用列表推導(dǎo)式。

>>> # Use list comprehensions
>>> [x * x for x in numbers]
[4, 1, 9, 9]
>>> [x for x in numbers if x % 2]
[1, 3, -3]

結(jié)論

在本文中,我們回顧了使用 lambda 函數(shù)可能會犯的四個常見錯誤。通過避免這些錯誤,您應(yīng)該能在代碼中正確使用 lambda 函數(shù)。

使用 lambda 函數(shù)的經(jīng)驗準(zhǔn)則是保持簡單以及只在本地使用一次。

到此這篇關(guān)于如何寫好 Python 的 Lambda 函數(shù)的文章就介紹到這了,更多相關(guān)Python 的 Lambda 函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Python常用標(biāo)準(zhǔn)庫之時間模塊time和datetime

    詳解Python常用標(biāo)準(zhǔn)庫之時間模塊time和datetime

    time和datetime是Python中常用的兩個時間模塊,本文將通過示例詳細為大家講講二者的使用方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)
    2022-05-05
  • 使用Python操作PDF文件

    使用Python操作PDF文件

    這篇文章介紹了Python操作PDF文件的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Django配合python進行requests請求的問題及解決方法

    Django配合python進行requests請求的問題及解決方法

    Python作為目前比較流行的編程語言,他內(nèi)置的Django框架就是一個很好的網(wǎng)絡(luò)框架,可以被用來搭建后端,和前端進行交互,那么我們現(xiàn)在來學(xué)習(xí)一下,如何用Python本地進行requests請求,并通過請求讓Django幫我們解決一些問題
    2022-06-06
  • Python-apply(lambda x: )的使用及說明

    Python-apply(lambda x: )的使用及說明

    這篇文章主要介紹了Python-apply(lambda x: )的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python實現(xiàn)打印類的所有屬性和方法

    python實現(xiàn)打印類的所有屬性和方法

    這篇文章主要介紹了python實現(xiàn)打印類的所有屬性和方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python迭代器與生成器詳解

    python迭代器與生成器詳解

    迭代器和生成器都是Python中特有的概念,迭代器可以看作是一個特殊的對象,每次調(diào)用該對象時會返回自身的下一個元素,從實現(xiàn)上來看,一個可迭代的對象必須是定義了__iter__()方法的對象,而一個迭代器必須是定義了__iter__()方法和next()方法的對象。
    2016-03-03
  • Python Flask入門

    Python Flask入門

    今天小編就為大家分享一篇Python Flask的入門教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-11-11
  • Python利用yield?form實現(xiàn)異步協(xié)程爬蟲

    Python利用yield?form實現(xiàn)異步協(xié)程爬蟲

    這篇文章主要為大家詳細介紹了Python如何利用yield?form實現(xiàn)異步協(xié)程爬蟲。其實這是很古老的用法了,現(xiàn)在大多用的aiohttp庫實現(xiàn),這篇記錄僅僅用做個人的協(xié)程底層實現(xiàn)的學(xué)習(xí),希望對大家有所幫助
    2022-11-11
  • 利用Pyhton中的requests包進行網(wǎng)頁訪問測試的方法

    利用Pyhton中的requests包進行網(wǎng)頁訪問測試的方法

    今天小編就為大家分享一篇利用Pyhton中的requests包進行網(wǎng)頁訪問測試的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • OpenCV圖像縮放之cv.resize()函數(shù)詳解

    OpenCV圖像縮放之cv.resize()函數(shù)詳解

    resize函數(shù)opencv中專門用來調(diào)整圖像大小的函數(shù),下面這篇文章主要給大家介紹了關(guān)于OpenCV圖像縮放之cv.resize()函數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09

最新評論

信宜市| 股票| 丹江口市| 乡宁县| 堆龙德庆县| 宣汉县| 永济市| 新巴尔虎左旗| 平舆县| 雅安市| 武陟县| 当涂县| 永川市| 衡东县| 田林县| 重庆市| 石棉县| 高安市| 连江县| 台中县| 行唐县| 会理县| 梅河口市| 达拉特旗| 奇台县| 洪洞县| 阳城县| 上饶市| 长顺县| 汶川县| 景东| 榆社县| 右玉县| 灌南县| 乐清市| 沭阳县| 方正县| 泽州县| 晋州市| 石柱| 九江市|