Python68:核心语法-函数进阶-匿名函数(lambda表达式)

命名函数、匿名函数

匿名函数

匿名函数指的是没有名称的函数,需要通过lambda表达式来声明函数,可以简化简单函数的编写(单行表达式)。

lambda表达式所定义出来的匿名函数,它的函数体的逻辑只能是一个单行的表达式,不能是复杂的逻辑;如果是复杂的逻辑,只能使用命名函数来定义。

上面定义出来的两个匿名函数是没有任何意义的,因为它只是定义了两个函数,并没有调用。没有调用的话,这两个函数是永远不会执行的,由于它没有名字,所以是无法直接调用的,如果想去调用这两个函数,这时候需要将函数赋值给一个变量。

将函数赋值给一个变量后,如上,out_line(和add)其实就是一个函数,就可以基于out_line变量名来调用这个函数了,因为它本质就是一个函数......这就是匿名函数的语法。

匿名函数的使用场景:

注意:函数逻辑比较简单(单行表达式)且只在一个地方使用时,可以考虑使用匿名函数,简化书写(通常作为高阶函数的参数使用)。

注意:匿名函数中可以返回结果,也可以不返回结果。返回结果时,不需要写return,表达式的运行结果就是要返回的结果。

python 复制代码
# 匿名函数
# 需求1:打印一个分割线
def outline():
    print("------------------")

outline()

outline2 = lambda : print("-----------------")
outline2()

# 需求2:计算两个数之和
def add(x, y):
    return x + y

print(add(1, 2))

add2 = lambda x, y: x + y
print(add(100, 200))
python 复制代码
D:\py_project_heima\.venv\Scripts\python.exe D:\py_project_heima\第二章\test.py 
------------------
-----------------
3
300
python 复制代码
# 需求3:完成如下列表的排序操作,按照每一个元素的字符个数,从小到大排序;
data_list = ["C++", "C", "Python", "Jack", "PHP", "Java", "Go", "JavaScript", "Rust"]

data_list.sort()
print(data_list) # ['C', 'C++', 'Go', 'Jack', 'Java', 'JavaScript', 'PHP', 'Python', 'Rust'] 这是按照字母的顺序排序的,跟编码有关
data_list.sort(key=lambda item: len(item)) # 匿名函数典型的应用场景
print(data_list) # ['C', 'Go', 'C++', 'PHP', 'Jack', 'Java', 'Rust', 'Python', 'JavaScript'] 按照每一个元素的字符个数,从小到大排序
data_list.sort(key=lambda item: len(item), reverse=True)
print(data_list) # ['JavaScript', 'Python', 'Jack', 'Java', 'Rust', 'C++', 'PHP', 'Go', 'C'] 按字符个数,从大到小
python 复制代码
['C', 'C++', 'Go', 'Jack', 'Java', 'JavaScript', 'PHP', 'Python', 'Rust']
['C', 'Go', 'C++', 'PHP', 'Jack', 'Java', 'Rust', 'Python', 'JavaScript']
['JavaScript', 'Python', 'Jack', 'Java', 'Rust', 'C++', 'PHP', 'Go', 'C']

小结:

  1. 匿名函数的定义方式
  1. 命名函数与匿名函数的选择?
  • 建议使用匿名函数的情况:函数逻辑简单,只在一个地方调用(常作为高阶函数的参数);
  • 建议使用命名函数的情况:函数逻辑复杂,需要多步操作,需要多个地方重复使用或需要加文档说明的场景。

代码的可读性和可维护性比简洁性更重要!


**声明:**本篇学习笔记参考黑马程序员相关课程,部分素材来源于网络公开资料及本人补充;文中为个人整理复盘,仅供学习交流使用。

相关推荐
专注仿真1 小时前
从「能跑通」到「能交付」:一套可直接落地的电商用户行为分析平台(Python + SQLite/MySQL + Streamlit 全栈源码与部署文档)
python·mysql·sqlite
小小张说故事1 小时前
Python 的 for 到底怎么跑起来的?拆开迭代协议:GET_ITER 之后 FOR_ITER 在循环什么
python
凯瑟琳.奥古斯特2 小时前
动态调优IoU提升OCR文本合并精度
开发语言·python·算法
蒸鱼Yuzheng2 小时前
自动化长任务治理:租约、心跳、孤儿进程与安全回收
自动化测试·python·任务调度·可靠性·分布式系统
2601_962885723 小时前
从 baostock 迁移到 AlphaFeed:接口对照与代码迁移指南
python
AI情绪识别开源3 小时前
检信ALLEMOTION 标定治理与信号质量闸门 · 老年无感认知评估分析器
python
七夜zippoe3 小时前
启元 Q1 腿部运动学逆解:Python 算站立下蹲关节角
开发语言·python·ai·机器人·腿部运动学
第404号工位3 小时前
插上充电宝真能偷光相册?我拆解了一台改装充电宝,实测“恶意充电”的真实攻击链
linux·python·架构
技术卷4 小时前
Windows 下自定义 MCP 踩坑:stdin 默认继承导致 CPython 启动阻塞
python·mcp·zcode