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

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

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

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

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

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

1. lambda 的定義與基本用法

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

  • 函數(shù)體只能是單一表達式(不能是多行代碼)
  • 若有返回值,無需顯式寫return(表達式結(jié)果即為返回值)
"""
lambda函數(shù)(匿名函數(shù)):
        函數(shù)體只能是一句話
        函數(shù)體如果是return返回值,return必須省略
lambda定義:
        test=lambda 形參列表: 一句函數(shù)體
"""
# 普通函數(shù):兩數(shù)相加并打印
def test(a, b):
    print(a + b)
# 等價的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ù))
# 無參數(shù)的lambda函數(shù)
test4 = lambda: print(111)
test4()  # 輸出:111

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

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

# 列表包含多個字典,需按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ù),代碼比單獨定義函數(shù)更簡潔。

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

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

'''
1. 使用匿名函數(shù)計算一個數(shù)的立方。
2. 定義一個匿名函數(shù),判斷一個數(shù)是否為偶數(shù)。
3. 定義一個匿名函數(shù),返回三個參數(shù)的乘積。
'''
# 1. 計算立方
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. 三個參數(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ù)、默認值參數(shù)、不定參數(shù)等,滿足不同場景的傳參需求。

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

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

# 函數(shù)定義:*后的參數(shù)c必須用關(guān)鍵字傳遞
def test1(a, b, *, c):
    print(a, b, c)
# 合法調(diào)用(前兩個位置參數(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. 默認值參數(shù)

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

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

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

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

  • *args:收集所有位置參數(shù),打包為元組。
  • **kwargs:收集所有關(guān)鍵字參數(shù),打包為字典。
def test3(*args, **kwargs):
    print("位置參數(shù)打包為元組:", args)
    print("關(guān)鍵字參數(shù)打包為字典:", kwargs)
# 傳遞3個位置參數(shù)和2個關(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ù)存儲在列表、元組、字典等結(jié)構(gòu)中,可通過解包快速傳遞:

  • 列表 / 元組 / 集合:用*解包為位置參數(shù)。
  • 字典:用 **解包為關(guān)鍵字參數(shù)(鍵需與函數(shù)參數(shù)名一致)。
# 從列表和字典中解包參數(shù)
test3(*[10, 20, 30], **{'a': 1, 'b': 2})
# 等價于 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ī)律且可拆解為同類子問題的場景(如階乘、數(shù)列計算)。

1. 遞歸的核心要素

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

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

2. 遞歸實例解析

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

# 階乘的遞歸實現(xiàn)
def jc(n):
    # 出口:n=1時,1! = 1
    if n == 1:
        return 1
    # 規(guī)律:n! = n × (n-1)!
    return n * jc(n - 1)
# 執(zhí)行過程:
# 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)

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

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

實例 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(計算過程:f(2)=9, f(3)=22, f(4)=53, f(5)=128?實際按遞歸推導(dǎo)正確值)

四、總結(jié)

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

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

相關(guān)文章

最新評論

敦化市| 通海县| 灯塔市| 富平县| 梁山县| 大姚县| 牡丹江市| 额敏县| 繁昌县| 临桂县| 卢龙县| 乌审旗| 蒲江县| 凤庆县| 丹凤县| 陵川县| 新营市| 杭锦旗| 定州市| 永德县| 达州市| 汝州市| 启东市| 福海县| 筠连县| 荣成市| 柏乡县| 东乌| 大宁县| 石河子市| 扶绥县| 凤阳县| 亚东县| 平潭县| 肃宁县| 九龙县| 鸡东县| 长寿区| 故城县| 株洲县| 合作市|