命名函数、匿名函数

匿名函数
匿名函数指的是没有名称的函数,需要通过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']
小结:
- 匿名函数的定义方式

- 命名函数与匿名函数的选择?
- 建议使用匿名函数的情况:函数逻辑简单,只在一个地方调用(常作为高阶函数的参数);
- 建议使用命名函数的情况:函数逻辑复杂,需要多步操作,需要多个地方重复使用或需要加文档说明的场景。
代码的可读性和可维护性比简洁性更重要!
**声明:**本篇学习笔记参考黑马程序员相关课程,部分素材来源于网络公开资料及本人补充;文中为个人整理复盘,仅供学习交流使用。