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

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


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

相关推荐
威哥爱编程5 小时前
模拟面试智能体开发实战 03:AI 面试官太客气?人设 Prompt 让它像个真考官
python·agent·harmonyos
量化分析码农5 小时前
股票数据接口返回字段逐项解析:从在线验证到 Python 数据校验
python
Dmz丶6 小时前
前端转 AI 100 天 Day 42:跨模型对比实战——用数据选模型,不靠“听说”
python
路溪非溪7 小时前
python标准库使用总结
开发语言·python
青少儿编程课堂7 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛
用户956256254298 小时前
五分钟用 E2B SDK 打通沙箱:环境变量只改三行
python·api
用户95179422510298 小时前
最小循环:让 Agent 跑起来(I1)
python·agent
沉默小管8 小时前
上班鼓励器_桌宠版
python
SomeOtherTime8 小时前
Rust 面向对象介绍(AI回答)
开发语言·python·rust
duansamve8 小时前
Flask中视图函数接收请求数据和返回响应实例
python·flask