匿名函数
顾名思义就是没有名字的函数。
匿名函数是一种没有函数名的函数,也称为"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}]
标签:01,函数,age,匿名,print,lambda,name From: https://www.cnblogs.com/allenxx/p/17538394.html