欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

在 Python 中,函數(shù)是代碼組織的核心單元。除了基礎定義與調(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)典應用:作為參數(shù)傳遞

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

# 列表包含多個字典,需按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 練習題

結(jié)合基礎運算場景,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ù)定義順序傳遞,必須一一對應。
關(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ù)可設置默認值,調(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

當參數(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)鍵點:
 出口條件 :當滿足某條件時,返回確定值(終止遞歸,避免無限循環(huán))。
規(guī)律(遞歸關(guān)系):將原問題拆解為規(guī)模更小的同類子問題。

注意:Python 默認遞歸深度不超過 1000 層,且遞歸效率較低,復雜場景建議用循環(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)推導)
    return 2 * f(n - 1) + f(n - 2)
print(f(5))  # 輸出:673(計算過程:f(2)=9, f(3)=22, f(4)=53, f(5)=128?實際按遞歸推導正確值)

四、總結(jié)

本文講解的三大函數(shù)進階特性,適用場景各有側(cè)重:
lambda 函數(shù) :適合實現(xiàn)簡單邏輯,尤其作為參數(shù)傳遞時可簡化代碼。
靈活參數(shù)類型 :位置參數(shù)、關(guān)鍵字參數(shù)、不定參數(shù)和解包,讓傳參更靈活,適應多變的輸入場景。
遞歸函數(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)文章

  • tensorflow+k-means聚類簡單實現(xiàn)貓狗圖像分類的方法

    tensorflow+k-means聚類簡單實現(xiàn)貓狗圖像分類的方法

    這篇文章主要介紹了tensorflow+k-means聚類簡單實現(xiàn)貓狗圖像分類,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Python實現(xiàn)腳本鎖功能(同時只能執(zhí)行一個腳本)

    Python實現(xiàn)腳本鎖功能(同時只能執(zhí)行一個腳本)

    這篇文章主要介紹了Python實現(xiàn)腳本鎖功能(同時只能執(zhí)行一個腳本),本文給大家分享了兩種方法,大家可以根據(jù)個人所需選擇適合自己的方法
    2017-05-05
  • Python模擬伯努利試驗和二項分布代碼實例

    Python模擬伯努利試驗和二項分布代碼實例

    這篇文章主要介紹了Python模擬伯努利試驗和二項分布代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Python基礎語法中defaultdict的使用小結(jié)

    Python基礎語法中defaultdict的使用小結(jié)

    Python的defaultdict是collections模塊中提供的一種特殊的字典類型,它與普通的字典(dict)有著相似的功能,本文主要介紹了Python基礎語法中defaultdict的使用小結(jié),感興趣的可以了解一下
    2025-04-04
  • python回調(diào)函數(shù)用法實例分析

    python回調(diào)函數(shù)用法實例分析

    這篇文章主要介紹了python回調(diào)函數(shù)用法,較為詳細的分析了常用的調(diào)用方式,并實例介紹了Python回調(diào)函數(shù)的使用技巧,需要的朋友可以參考下
    2015-05-05
  • 使用PySide多線程處理圖形界面卡頓問題詳解

    使用PySide多線程處理圖形界面卡頓問題詳解

    這篇文章主要介紹了使用PySide多線程處理圖形界面卡頓問題,在制作圖形界面時,只用一個線程很容易導致卡頓無響應,一旦主線程被阻塞,那么整個圖形界面都會無法繼續(xù)使用,為了解決這個問題,就得使用多線程,需要的朋友可以參考下
    2025-04-04
  • Python使用Chardet庫檢測字符編碼的操作詳解

    Python使用Chardet庫檢測字符編碼的操作詳解

    在處理文本數(shù)據(jù)時,字符編碼問題是一個常見的挑戰(zhàn),如果編碼不正確,可能會導致亂碼問題,而 Chardet 是 Python 中非常實用的一個庫,可以幫助我們快速檢測文件或字符串的編碼格式,本文給大家詳細介紹了Python Chardet 庫用法,需要的朋友可以參考下
    2025-01-01
  • linux mint中搜狗輸入法導致pycharm卡死的問題

    linux mint中搜狗輸入法導致pycharm卡死的問題

    這篇文章主要介紹了linux mint中搜狗輸入法導致pycharm卡死的問題,這篇文章給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Python利用request庫實現(xiàn)翻譯接口

    Python利用request庫實現(xiàn)翻譯接口

    這篇文章主要為大家詳細介紹了Python如何利用request庫打造自己的翻譯接口,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-04-04
  • python交互式圖形編程實例(三)

    python交互式圖形編程實例(三)

    這篇文章主要為大家詳細介紹了python交互式圖形編程實例第三篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論