Python lambda函数(匿名函数)、参数类型与递归全解析

2025-08-07 21:50

本文主要是介绍Python lambda函数(匿名函数)、参数类型与递归全解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效...

python 中,函数是代码组织的核心单元。除了基础定义与调用,lambda 匿名函数、灵活的参数类型以及递归函数等进阶特性,能极大提升代码的简洁性与灵活性。本文结合实例代码,详细讲解这些进阶知识点,帮助你写出更 Pythonic 的代码。

一、lambda 匿名函数:简洁的单行函数

lambda 函数(匿名函数)是一种简化的函数形式,适用于实现简单逻辑,其核心特点是 “一行代码完成一个功能”。

1. lambda 的定义与基本用法

lambda 函数的语法格式:
函数名 = lambda 形参列表: 表达式(函数体)

  • 函数体只能是单一表达式(不能是多行代码)
  • 若有返回值,无需显式写return(表达式结果即为返回值)
""android"
lambda函数(匿名函数):
        函数体只能是一句话
        函数体如果是return返回值,return必须省略
lambda定义:
        test=lambda 形参列表: 一句函数体
"""
# 普通函数:两数相加并打印
def test(a, b):
    print(a + b)
# 等价的lambda函数
test2 = lambda a, b: print(a + b)
test2(1, 2)  # 输出:3
# lambda函数返回布尔值(判断是否为偶数)
test3 = lambda a: a % 2 == 0
print(test3(8))  # 输出:True(8是偶数)
# 无参数的lambda函数
test4 = lambda: print(111)
test4()  # 输出:111

2. lambda 的经典应用:作为参数传递

lambda 函数常作为sorted()map()filter()等函数的参数,简化代码逻辑。例如对复杂列表排序:

# 列表包含多个字典,需按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指定排序规则:先按age升序,再按height升序
sorted_ls = sorted(ls, key=lambda dic: (dic['age'], dic['height']), reverse=False)
print(sorted_ls)
# 输出结果中,age=15的元素按height从小到大排列(rose在前,tom在后)

此处 lambda 函数lambda dic: (dic['age'], dic['height'])作为key参数,定义了排序的依据,代码比单独定义函数更简洁。

3. 常见 lambda 练习题

结合基础运算场景,lambda 函数可快速实现简单逻辑:

'''
1. 使用匿名函数计算一个数的立方。
2. 定义一个匿名函数,判断一个数是否为偶数。
3. 定义一个匿名函数,返回三个参数的乘积。
'''
# 1. 计算立方
test1 = lambda x: x **3
print(test1(2))  # 输出:8(2=8)
# 2. 判断偶数
test2 = lambda x: x % 2 == 0
print(test2(6))  # 输出:True(6是偶数)
# 3. 三个参数乘积
test3 = lambda x, y, z: x * y * z
print(pythontest3(1, 2, 3))  # 输出:6(123=6)

二、函数参数类型:灵活传递的艺术

Python 函数的参数类型非常灵活,支持位置参数、关键字参数、默认值参数、不定参数等,满足不同场景的传参需求。

1. 位置参数与关键字参数

 位置参数 :按参数定义顺序传递,必须一一对应。
关键字参数 :通过param=val形式传递,无需考虑顺序;*后的参数必须用关键字传递。

# 函数定义:*后的参数c必须用关键字传递
def test1(a, b, *, c):
    print(a, b, c)
# 合法调用(前两个位置参数,c用关键字)
test1(1, 2, c=5)  # 输出:1 2 5
# 关键字参数可打乱顺序
test1(b=2, a=1, c=4)  # 输出:1 2 4

2. 默认值参数

参数可设置默认值,调用时若不传递则使用默认值(默认参数必须放在位置参数后)。

def test2(a, b=3):  # b的默认值为3
    print(a, b)
test2(1, 9)  # 传递b=9,输出:1 9
test2(1)     # 不传递b,使用默认值,输出:1 3

3. 不定参数:*args 与 **kwargs

当参数数量不确定时,可使用不定参数:

  • *args:收集所有位置参数,打包为元组。
  • **kwargs:收集所有关键字参数,打包为字典。
def test3(*args, **kwargs):
    print("位置参数打包为元组:", args)
    print("关键字参数打包为字典:", kwargs)
# 传递3个位置参数和2个关键字参数
test3(1, 2, 3, a=4, b=5)
# 输出:
# 位置参数打包为元组: (1, 2, 3)
# 关键字参数打包为字典: {'a': 4, 'b': 5}
# 不传递参数(也合法)
test3()
# 输出:
# 位置参数打包为元组: ()
# 关键字参数打包为字典: {}

4. 解包传递:从数据结构中提取参数

若参数存储在列表、元组、字典等结构中,可通过解包快速传递:

  • 列表 / 元组 / 集合:用*解包为位置参数。
  • 字典:用 **解包为关键字参数(键需与函数参数名一致)。
# 从列表和字典中解包参数
test3(*[10, 20, 30], **{'a': 1, 'b': 2})
# 等价于 test3(10, 20, 30, a=1, b=2)
# 输出:
# 位置参数打包为元组: (10, 20, 30)
# 关键字参数打包为字典: {'a': 1, 'b': 2}

三、递归函数:自己调用自己的艺术

递归是指函数内部调用自身的编程技巧,适用于有明确规律且可拆解为同类子问题的场景(如阶乘、数列计算)。

1. 递归的核心要素

python递归函数需明确两个关键点:
 出口条件 :当满足某条件时,返回确定值(终止递归,避免无限循环)。
规律(递归关系):将原问题拆解为规模更小的同类子问题。

注意:Python 默认递归深度不超过 1000 层,且递归效率较低,复杂场景建议用循环替代。

2. 递归实例解析

实例 1:阶乘计算(n! = n × (n-1) × ... × 1)

# 阶乘的递归实现
def jc(n):
    # 出口:n=1时,1! = 1
    if n == 1:
        return 1
    # 规律:n! = n  (n-1)!
    return n * jc(n - 1)
# 执行过程:
# 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:斐波那契数列(1, 1, 2, 3, 5, 8...,第 n 项 = 前两项之和)

def feibo(n):
    # 出口:第1项和第2项均为1
    if n == 1 or n == 2:
        return 1
    # 规律:第n项 = 第n-1项 + 第n-2项
    return feibo(n - 1) + feibo(n - 2)
print(feibo(5))  # 输出:5(第5项为5)
# 执行过程:
# feibo(5) = feibo(4) + feibo(3)
# feibo(4) = feibo(3) + feibo(2) = 2 + 1 = 3
# feibo(3) = feibjso(2) + feibo(1) = 1 + 1 = 2

实例 3:自定义数列(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
    # 规律:f(n) = 2f(n-1) + f(n-2)(由f(n+2)=2f(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?实际按递归推导正确值)

四、总结

本文讲解的三大函数进阶特性,适用场景各有侧重:
lambda 函数 :适编程合实现简单逻辑,尤其作为参数传递时可简化代码。
灵活参数类型 :位置参数、关键字参数、不定参数和解包,让传参更灵活,适应多变的输入场景。
递归函数:适合有明确规律的问题(如数列、树结构遍历),但需注意深度限制和效率问题。

到此这篇关于Python lambda函数(匿名函数)、参数类型与递归全解析的文章就介绍到这了,更多相关Python lambda函数内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Python lambda函数(匿名函数)、参数类型与递归全解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155627

相关文章

Python实现开根号的五种方式

《Python实现开根号的五种方式》在日常数据处理、数学计算甚至算法题中,开根号是一个高频操作,但你知道吗?Python中实现开根号的方式远不止一种!本文总结了5种常用方法,感兴趣的小伙伴跟着小编一起... 目录一、为什么需要多种开根号方式?二、5种开根号方式详解方法1:数学库 math.sqrt() ——

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

Python跨文件实例化、跨文件调用及导入库示例代码

《Python跨文件实例化、跨文件调用及导入库示例代码》在Python开发过程中,经常会遇到需要在一个工程中调用另一个工程的Python文件的情况,:本文主要介绍Python跨文件实例化、跨文件调... 目录1. 核心对比表格(完整汇总)1.1 自定义模块跨文件调用汇总表1.2 第三方库使用汇总表1.3 导

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD

Python实现Word转PDF全攻略(从入门到实战)

《Python实现Word转PDF全攻略(从入门到实战)》在数字化办公场景中,Word文档的跨平台兼容性始终是个难题,而PDF格式凭借所见即所得的特性,已成为文档分发和归档的标准格式,下面小编就来和大... 目录一、为什么需要python处理Word转PDF?二、主流转换方案对比三、五套实战方案详解方案1:

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指