匿名函数(lambda表达式)01

匿名函数

顾名思义就是没有名字的函数。

匿名函数是一种没有函数名的函数,也称为"lambda函数"。

它是一种简洁的函数定义方式,可以在需要函数对象的任何地方使用,并且通常用于简化代码或作为其他函数的参数。

语法

1 lambda arguments: expression

其中,arguments是函数的参数列表,而expression是函数体中的单个表达式,该表达式的结果将作为函数的返回值。

1 add = lambda x, y: x + y  # python一切皆对象,add是此匿名函数的引用,可以当函数名使用
2 result = add(2, 3)  # 调用lambda函数,返回结果: 5 

定义了一个lambda函数,接受两个参数x和y,并返回它们的和。然后,我们调用lambda函数并传递参数2和3,得到结果5

示例

复制代码
  1 '''
  2 匿名函数最佳实践:
  3     1. 简短、清晰的表达式: 匿名函数应尽量保持简短和清晰,只包含必要的表达式。复杂的逻辑或多行代码更适合使用常规函数。
  4     2. 仅限于简单操作: 匿名函数适合于执行简单的操作,如数学运算、过滤、映射等。对于复杂的任务,建议使用常规函数来提高可读性和维护性。
  5     3. 作为其他函数的参数: 匿名函数通常作为其他函数的参数传递,例如在map()、filter()和reduce()等函数中使用。
  6 
  7 匿名函数的注意事项:
  8     1. 无法包含多个表达式: 匿名函数只能包含单个表达式,无法包含多个语句或复杂的控制流程。
  9     2. 没有函数名称: 匿名函数是没有显示的函数名称,因此无法像常规函数那样被引用或调用。
 10     3. 可读性和可维护性: 尽管匿名函数可以简化代码,但过度使用匿名函数可能会降低代码的可读性和可维护性。请在适当的时候使用匿名函数。
 11     4. 局部变量的限制: 匿名函数的主体只能包含表达式,而不能包含赋值语句。如果需要在匿名函数中使用局部变量,请考虑使用默认参数或闭包。
 12 '''
 13 
 14 '''
 15 1. 体验lambda与普通函数
 16 需求:函数 返回值100
 17 '''
 18 
 19 
 20 # 1.1 函数
 21 def fn1():
 22     return 100
 23 
 24 
 25 result = fn1()  # 调用函数,并返回执行结果
 26 print(result)  # 100
 27 
 28 # 1.2 lambda  匿名函数
 29 fn2 = lambda: 100  # lambda 参数列表: 表达式,此处是只有表达式即100,fn2是匿名函数的引用,调用时需要添加()即fn2()
 30 print(fn2)  # lambda内存地址 <function <lambda> at 0x00000252EFC704A0>
 31 
 32 # 100返回值 调用函数
 33 print(fn2())  # 100
 34 
 35 '''
 36 2. lambda加法计算
 37 需求:计算任意两个数字的累加和
 38 '''
 39 
 40 
 41 # 1. 函数
 42 def add(a, b):
 43     return a + b
 44 
 45 
 46 result = add(1, 2)
 47 print(result)
 48 
 49 # 2. lambda
 50 fn1 = lambda a, b: a + b  # 参数是a,b,表达式 a + b,其实隐藏了return 表达式即return a + b
 51 print(fn1(2, 3))  # 5
 52 
 53 '''
 54 3. 函数参数:
 55     1. 无参
 56     2. 1个参数
 57     3. 默认参数
 58     4. 可变参数:可变参数位置参数
 59     5. 可变参数:可变参数关键字参数
 60 '''
 61 # 1. 无参数
 62 fn1 = lambda: 100
 63 print(fn1())  # 100
 64 
 65 # 2. 一个参数
 66 fn2 = lambda a: a
 67 print(fn2('hello world'))  # hello world
 68 
 69 # 3. 默认参数/缺省参数
 70 fn3 = lambda a, b, c=100: a + b + c
 71 print(fn3(10, 20))  # 130
 72 print(fn3(10, 20, 200))  # 230
 73 
 74 # 4. 可变参数:不定长位置参数 *args
 75 fn4 = lambda *args: args
 76 print(fn4(10, 20))  # (10, 20)
 77 print(fn4(10, 20, 30, 40))  # (10, 20, 30, 40)
 78 print(fn4(10))  # (10,)
 79 
 80 # 5. 可变参数:不定长关键字参数 **kwargs
 81 fn5 = lambda **kwargs: kwargs
 82 print(fn5(name='Python'))  # {'name': 'Python'}
 83 print(fn5(name='Python', age=30))  # {'name': 'Python', 'age': 30}
 84 
 85 '''
 86 4. 带判断的lambdba
 87 '''
 88 # lambda 获取2个数字的最大数
 89 fn1 = lambda a, b: a if a > b else b  # 参数列表:a,b 表达式是 a if a > b else b
 90 print(fn1(1000, 500))  # 1000
 91 
 92 '''
 93 5. lamdba表达式结合列表sort方法进行排序
 94 '''
 95 students = [
 96     {'name': 'TOM', 'age': 20},
 97     {'name': 'ROSE', 'age': 19},
 98     {'name': 'Jack', 'age': 22}
 99 ]
100 
101 # 语法: sort(key=lambda..., reverse=bool数据)
102 # 5.1通过key设置排序规则即按x['name']升序排序
103 students.sort(key=lambda x: x['name'])
104 print(students)  # [{'name': 'Jack', 'age': 22}, {'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}]
105 
106 # 5.2通过key设置排序规则即按x['name']降序排序
107 students.sort(key=lambda x: x['name'], reverse=True)
108 print(students)  # [{'name': 'TOM', 'age': 20}, {'name': 'ROSE', 'age': 19}, {'name': 'Jack', 'age': 22}]
109 
110 # 5.3 通过key设置排序规则即按x['age']升序排序
111 students.sort(key=lambda x: x['age'])
112 print(students)  # [{'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}, {'name': 'Jack', 'age': 22}]
复制代码

 

posted @   Allen_Hao  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示