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

Python?lambda函數(shù)(匿名函數(shù))、參數(shù)類型與遞歸全解析

 更新時(shí)間:2025年08月07日 11:19:28   作者:qwerty12ljhxjdj  
本文詳解Python中l(wèi)ambda匿名函數(shù)、靈活參數(shù)類型和遞歸函數(shù)三大進(jìn)階特性,分別介紹其定義、應(yīng)用場(chǎng)景及注意事項(xiàng),助力編寫簡(jiǎn)潔高效的Pythonic代碼,感興趣的朋友跟隨小編一起看看吧

在 Python 中,函數(shù)是代碼組織的核心單元。除了基礎(chǔ)定義與調(diào)用,lambda 匿名函數(shù)、靈活的參數(shù)類型以及遞歸函數(shù)等進(jìn)階特性,能極大提升代碼的簡(jiǎn)潔性與靈活性。本文結(jié)合實(shí)例代碼,詳細(xì)講解這些進(jìn)階知識(shí)點(diǎn),幫助你寫出更 Pythonic 的代碼。

一、lambda 匿名函數(shù):簡(jiǎn)潔的單行函數(shù)

lambda 函數(shù)(匿名函數(shù))是一種簡(jiǎn)化的函數(shù)形式,適用于實(shí)現(xiàn)簡(jiǎn)單邏輯,其核心特點(diǎn)是 “一行代碼完成一個(gè)功能”。

1. lambda 的定義與基本用法

lambda 函數(shù)的語(yǔ)法格式:
函數(shù)名 = lambda 形參列表: 表達(dá)式(函數(shù)體)

  • 函數(shù)體只能是單一表達(dá)式(不能是多行代碼)
  • 若有返回值,無(wú)需顯式寫return(表達(dá)式結(jié)果即為返回值)
"""
lambda函數(shù)(匿名函數(shù)):
        函數(shù)體只能是一句話
        函數(shù)體如果是return返回值,return必須省略
lambda定義:
        test=lambda 形參列表: 一句函數(shù)體
"""
# 普通函數(shù):兩數(shù)相加并打印
def test(a, b):
    print(a + b)
# 等價(jià)的lambda函數(shù)
test2 = lambda a, b: print(a + b)
test2(1, 2)  # 輸出:3
# lambda函數(shù)返回布爾值(判斷是否為偶數(shù))
test3 = lambda a: a % 2 == 0
print(test3(8))  # 輸出:True(8是偶數(shù))
# 無(wú)參數(shù)的lambda函數(shù)
test4 = lambda: print(111)
test4()  # 輸出:111

2. lambda 的經(jīng)典應(yīng)用:作為參數(shù)傳遞

lambda 函數(shù)常作為sorted()、map()、filter()等函數(shù)的參數(shù),簡(jiǎn)化代碼邏輯。例如對(duì)復(fù)雜列表排序:

# 列表包含多個(gè)字典,需按age和height排序
ls = [
    {'name': 'mary', 'age': '20', 'height': 175},
    {'name': 'tom', 'age': '15', 'height': 168},
    {'name': 'jack', 'age': '18', 'height': 183},
    {'name': 'rose', 'age': '15', 'height': 160},
]
# 使用lambda指定排序規(guī)則:先按age升序,再按height升序
sorted_ls = sorted(ls, key=lambda dic: (dic['age'], dic['height']), reverse=False)
print(sorted_ls)
# 輸出結(jié)果中,age=15的元素按height從小到大排列(rose在前,tom在后)

此處 lambda 函數(shù)lambda dic: (dic['age'], dic['height'])作為key參數(shù),定義了排序的依據(jù),代碼比單獨(dú)定義函數(shù)更簡(jiǎn)潔。

3. 常見 lambda 練習(xí)題

結(jié)合基礎(chǔ)運(yùn)算場(chǎng)景,lambda 函數(shù)可快速實(shí)現(xiàn)簡(jiǎn)單邏輯:

'''
1. 使用匿名函數(shù)計(jì)算一個(gè)數(shù)的立方。
2. 定義一個(gè)匿名函數(shù),判斷一個(gè)數(shù)是否為偶數(shù)。
3. 定義一個(gè)匿名函數(shù),返回三個(gè)參數(shù)的乘積。
'''
# 1. 計(jì)算立方
test1 = lambda x: x **3
print(test1(2))  # 輸出:8(23=8)
# 2. 判斷偶數(shù)
test2 = lambda x: x % 2 == 0
print(test2(6))  # 輸出:True(6是偶數(shù))
# 3. 三個(gè)參數(shù)乘積
test3 = lambda x, y, z: x * y * z
print(test3(1, 2, 3))  # 輸出:6(1×2×3=6)

二、函數(shù)參數(shù)類型:靈活傳遞的藝術(shù)

Python 函數(shù)的參數(shù)類型非常靈活,支持位置參數(shù)、關(guān)鍵字參數(shù)、默認(rèn)值參數(shù)、不定參數(shù)等,滿足不同場(chǎng)景的傳參需求。

1. 位置參數(shù)與關(guān)鍵字參數(shù)

 位置參數(shù) :按參數(shù)定義順序傳遞,必須一一對(duì)應(yīng)。
關(guān)鍵字參數(shù) :通過(guò)param=val形式傳遞,無(wú)需考慮順序;*后的參數(shù)必須用關(guān)鍵字傳遞。

# 函數(shù)定義:*后的參數(shù)c必須用關(guān)鍵字傳遞
def test1(a, b, *, c):
    print(a, b, c)
# 合法調(diào)用(前兩個(gè)位置參數(shù),c用關(guān)鍵字)
test1(1, 2, c=5)  # 輸出:1 2 5
# 關(guān)鍵字參數(shù)可打亂順序
test1(b=2, a=1, c=4)  # 輸出:1 2 4

2. 默認(rèn)值參數(shù)

參數(shù)可設(shè)置默認(rèn)值,調(diào)用時(shí)若不傳遞則使用默認(rèn)值(默認(rèn)參數(shù)必須放在位置參數(shù)后)。

def test2(a, b=3):  # b的默認(rèn)值為3
    print(a, b)
test2(1, 9)  # 傳遞b=9,輸出:1 9
test2(1)     # 不傳遞b,使用默認(rèn)值,輸出:1 3

3. 不定參數(shù):*args 與 **kwargs

當(dāng)參數(shù)數(shù)量不確定時(shí),可使用不定參數(shù):

  • *args:收集所有位置參數(shù),打包為元組。
  • **kwargs:收集所有關(guān)鍵字參數(shù),打包為字典。
def test3(*args, **kwargs):
    print("位置參數(shù)打包為元組:", args)
    print("關(guān)鍵字參數(shù)打包為字典:", kwargs)
# 傳遞3個(gè)位置參數(shù)和2個(gè)關(guān)鍵字參數(shù)
test3(1, 2, 3, a=4, b=5)
# 輸出:
# 位置參數(shù)打包為元組: (1, 2, 3)
# 關(guān)鍵字參數(shù)打包為字典: {'a': 4, 'b': 5}
# 不傳遞參數(shù)(也合法)
test3()
# 輸出:
# 位置參數(shù)打包為元組: ()
# 關(guān)鍵字參數(shù)打包為字典: {}

4. 解包傳遞:從數(shù)據(jù)結(jié)構(gòu)中提取參數(shù)

若參數(shù)存儲(chǔ)在列表、元組、字典等結(jié)構(gòu)中,可通過(guò)解包快速傳遞:

  • 列表 / 元組 / 集合:用*解包為位置參數(shù)。
  • 字典:用 **解包為關(guān)鍵字參數(shù)(鍵需與函數(shù)參數(shù)名一致)。
# 從列表和字典中解包參數(shù)
test3(*[10, 20, 30], **{'a': 1, 'b': 2})
# 等價(jià)于 test3(10, 20, 30, a=1, b=2)
# 輸出:
# 位置參數(shù)打包為元組: (10, 20, 30)
# 關(guān)鍵字參數(shù)打包為字典: {'a': 1, 'b': 2}

三、遞歸函數(shù):自己調(diào)用自己的藝術(shù)

遞歸是指函數(shù)內(nèi)部調(diào)用自身的編程技巧,適用于有明確規(guī)律且可拆解為同類子問題的場(chǎng)景(如階乘、數(shù)列計(jì)算)。

1. 遞歸的核心要素

寫遞歸函數(shù)需明確兩個(gè)關(guān)鍵點(diǎn):
 出口條件 :當(dāng)滿足某條件時(shí),返回確定值(終止遞歸,避免無(wú)限循環(huán))。
規(guī)律(遞歸關(guān)系):將原問題拆解為規(guī)模更小的同類子問題。

注意:Python 默認(rèn)遞歸深度不超過(guò) 1000 層,且遞歸效率較低,復(fù)雜場(chǎng)景建議用循環(huán)替代。

2. 遞歸實(shí)例解析

實(shí)例 1:階乘計(jì)算(n! = n × (n-1) × ... × 1)

# 階乘的遞歸實(shí)現(xiàn)
def jc(n):
    # 出口:n=1時(shí),1! = 1
    if n == 1:
        return 1
    # 規(guī)律:n! = n × (n-1)!
    return n * jc(n - 1)
# 執(zhí)行過(guò)程:
# jc(5) = 5 × jc(4)
# jc(4) = 4 × jc(3)
# jc(3) = 3 × jc(2)
# jc(2) = 2 × jc(1)
# jc(1) = 1
print(jc(5))  # 輸出:120(5! = 120)

實(shí)例 2:斐波那契數(shù)列(1, 1, 2, 3, 5, 8...,第 n 項(xiàng) = 前兩項(xiàng)之和)

def feibo(n):
    # 出口:第1項(xiàng)和第2項(xiàng)均為1
    if n == 1 or n == 2:
        return 1
    # 規(guī)律:第n項(xiàng) = 第n-1項(xiàng) + 第n-2項(xiàng)
    return feibo(n - 1) + feibo(n - 2)
print(feibo(5))  # 輸出:5(第5項(xiàng)為5)
# 執(zhí)行過(guò)程:
# feibo(5) = feibo(4) + feibo(3)
# feibo(4) = feibo(3) + feibo(2) = 2 + 1 = 3
# feibo(3) = feibo(2) + feibo(1) = 1 + 1 = 2

實(shí)例 3:自定義數(shù)列(f (0)=1, f (1)=4, f (n+2)=2×f (n+1)+f (n))

# 求f(10)的值
def f(n):
    # 出口:n=0返回1,n=1返回4
    if n == 0:
        return 1
    if n == 1:
        return 4
    # 規(guī)律:f(n) = 2×f(n-1) + f(n-2)(由f(n+2)=2×f(n+1)+f(n)推導(dǎo))
    return 2 * f(n - 1) + f(n - 2)
print(f(5))  # 輸出:673(計(jì)算過(guò)程:f(2)=9, f(3)=22, f(4)=53, f(5)=128?實(shí)際按遞歸推導(dǎo)正確值)

四、總結(jié)

本文講解的三大函數(shù)進(jìn)階特性,適用場(chǎng)景各有側(cè)重:
lambda 函數(shù) :適合實(shí)現(xiàn)簡(jiǎn)單邏輯,尤其作為參數(shù)傳遞時(shí)可簡(jiǎn)化代碼。
靈活參數(shù)類型 :位置參數(shù)、關(guān)鍵字參數(shù)、不定參數(shù)和解包,讓傳參更靈活,適應(yīng)多變的輸入場(chǎng)景。
遞歸函數(shù):適合有明確規(guī)律的問題(如數(shù)列、樹結(jié)構(gòu)遍歷),但需注意深度限制和效率問題。

到此這篇關(guān)于Python lambda函數(shù)(匿名函數(shù))、參數(shù)類型與遞歸全解析的文章就介紹到這了,更多相關(guān)Python lambda函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python數(shù)據(jù)持久化shelve模塊用法分析

    Python數(shù)據(jù)持久化shelve模塊用法分析

    這篇文章主要介紹了Python數(shù)據(jù)持久化shelve模塊用法,結(jié)合實(shí)例形式較為詳細(xì)的總結(jié)分析了shelve模塊的功能、原理及簡(jiǎn)單使用方法,需要的朋友可以參考下
    2018-06-06
  • 零基礎(chǔ)實(shí)踐Python調(diào)用支付寶沙箱生成收款二維碼并掃碼支付

    零基礎(chǔ)實(shí)踐Python調(diào)用支付寶沙箱生成收款二維碼并掃碼支付

    本文將引導(dǎo)您一步步實(shí)現(xiàn)使用Python語(yǔ)言,通過(guò)支付寶開放平臺(tái)的 alipay.trade.precreateAPI,在沙箱環(huán)境中生成一個(gè)收款二維碼,并使用沙箱買家賬號(hào)進(jìn)行掃碼支付的全過(guò)程,感興趣的小伙伴可以了解下
    2026-02-02
  • Python接口測(cè)試之如何使用requests發(fā)起請(qǐng)求

    Python接口測(cè)試之如何使用requests發(fā)起請(qǐng)求

    這篇文章主要介紹了Python接口測(cè)試之如何使用requests發(fā)起請(qǐng)求問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python如何用wx模塊創(chuàng)建文本編輯器

    Python如何用wx模塊創(chuàng)建文本編輯器

    在本篇文章里小編給大家整理的是關(guān)于Python的wx模塊創(chuàng)建文本編輯器方法,需要的朋友們可以參考下。
    2020-06-06
  • Django數(shù)據(jù)庫(kù)遷移常見使用方法

    Django數(shù)據(jù)庫(kù)遷移常見使用方法

    這篇文章主要介紹了Django數(shù)據(jù)庫(kù)遷移常見使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python 文件操作大全

    Python 文件操作大全

    這篇文章主要介紹了Python 文件操作大全,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-09-09
  • Python 多線程其他屬性以及繼承Thread類詳解

    Python 多線程其他屬性以及繼承Thread類詳解

    這篇文章主要介紹了Python 多線程其他屬性以及繼承Thread類詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python、java等哪一門編程語(yǔ)言適合人工智能?

    python、java等哪一門編程語(yǔ)言適合人工智能?

    哪一門編程語(yǔ)言適合人工智能?這篇文章主要為大家詳細(xì)介紹了python編程語(yǔ)言適合人工智能的原因、優(yōu)點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 使用Python根據(jù)一個(gè)列表的順序?qū)ζ渌斜磉M(jìn)行排序

    使用Python根據(jù)一個(gè)列表的順序?qū)ζ渌斜磉M(jìn)行排序

    這篇文章主要介紹了使用Python根據(jù)一個(gè)列表的順序?qū)ζ渌斜磉M(jìn)行排序,根據(jù)列表B中每個(gè)元素的下標(biāo)來(lái)獲取列表A中對(duì)應(yīng)位置的元素,將其作為排序依據(jù)即可,需要的朋友可以參考下
    2023-10-10
  • Python使用wxPython開發(fā)電腦信息二維碼生成器

    Python使用wxPython開發(fā)電腦信息二維碼生成器

    在日常工作中,我們經(jīng)常需要快速分享電腦的基本信息,今天我們就來(lái)開發(fā)一個(gè)實(shí)用的小工具——電腦信息二維碼生成器,只需一鍵就能將電腦信息生成二維碼,方便快捷地分享給他人
    2025-12-12

最新評(píng)論

平和县| 日照市| 朔州市| 大理市| 长乐市| 遂平县| 钟祥市| 扶沟县| 沿河| 土默特左旗| 奉贤区| 昭通市| 吉林省| 平远县| 锡林浩特市| 五原县| 诸城市| 堆龙德庆县| 嘉鱼县| 苏州市| 淮阳县| 清远市| 景洪市| 汽车| 南通市| 榆树市| 侯马市| 廊坊市| 博乐市| 静乐县| 沽源县| 格尔木市| 桓仁| 互助| 盈江县| 烟台市| 耒阳市| 台中县| 高碑店市| 观塘区| 四川省|