python之匿名函数lambda

目录

1、lambda函数特点

2、lambda函数的基本语法:

3、lambda函数经典应用场景举例


1、lambda函数特点

  • 匿名性:lambda函数没有名称,因此被称为匿名函数。
  • 简洁性:用于快速定义仅含一个表达式的简单函数。
  • 单一表达式限制:lambda函数内部不允许有其他语句,只能是一个表达式。

2、lambda函数的基本语法:

lambda 参数 : 表达式
1、lambda的参数可以包含零个或多个参数,但必须在冒号(:)前指定
2、lambda只有一个表达式,用于计算并返回函数的结果

传参可以通过以下形式

print((lambda x: x * x)(3)) #输出 9

#上面一条语句拆开可以这样写
result=lambda x: x * x
print(result(3)) #输出 9

#都等同于创建一个函数
def f(x):
    return x * x
print(f(3)) #输出 9

也可以不传参

print((lambda : 'hello world')()) #输出 hello world
return1=lambda : 'hello world'
print(return1()) #输出 hello world

传入多个参数

sum=lambda a,b,c:a+b+c
print(sum(1,2,3))#输出 6

3、lambda函数经典应用场景举例

lambda 函数通常与内置函数如 map()、sorted()、filter() 和 reduce() 一起使用,以便在集合上执行操作。

# map()函数配合lambda将列表中每个元素平方,lambda作为key参数来指定转换规则
list1 = [1, 2, 3, 4, 5]
new_list = list(map(lambda x: x ** 2, list1))
print(new_list)  # 输出:[1, 4, 9, 16, 25]

#在sorted函数中作为 key 参数来指定排序
dic={'麦叔':59, '张三':87, 'FGA':78, '石石':100, '莫名':90}
print(sorted(dic.items(), key=lambda x:x[1], reverse=True)) 
#[('石石', 100), ('莫名', 90), ('张三', 87), ('FGA', 78), ('麦叔', 59)]
'''
lambda 函数的作用是作为 key 参数传给 sorted 函数,它告诉排序函数根据每个键值对中的第二个元素(即值)进行排序。
这种情况下,传参的位置关系体现在 lambda x 中的 x 直接接收了 sorted 函数内部处理的每个元素,而不是通过函数调用时明确的位置参数传递。
'''

# filter()函数配合lambda过滤出偶数
numbers = list(filter(lambda x: x % 2 == 0, list1))
print(numbers)  # 输出:[2, 4]

# 使用 reduce() 和 lambda 函数计算乘积
from functools import reduce
numbers = [1, 2, 3, 4, 5]
乘积 = reduce(lambda x, y: x * y, numbers)
print(乘积)  # 输出:120
#reduce() 函数会对一个可迭代对象(如列表、元组或字符串)进行累积操作,
#将序列的元素从左到右逐个结合,通过一个二元操作函数将相邻的元素进行合并,并返回最终的单一结果。

创建一个简单回调函数

# 定义一个求两数之和的函数,并将其作为参数传递给另一个函数
def apply_operation(func, a, b):
    return func(a, b)

result = apply_operation(lambda x, y: x + y, 3, 5)
print(result)  # 输出:8

再分享一个我在外网看到的@lambda _: _() 立即执行装饰器,非常有趣

from datetime import datetime
@lambda _: _()
def func() -> str:
    time_text: str = f'Start at : {datetime.now():%y-%m-%d %H:%M:%S}'
    print(time_text)
    return time_text
@lambda _: _()
def func1()->bool:
    print('func1')
    return True
@lambda _: _()  # invoke immediately 立即调用
def result() -> int:
    a = 6
    b = 7
    print(a + b)
    return a + b

assert isinstance(result, int) #判断检查result函数输出类型
assert result == 13 #判断检查result函数输出结果
#locals() 函数返回的是调用该函数时的当前作用域内的局部变量。
#如果它在函数内部定义但没有调用该函数
#那么在函数外部调用 locals() 将不会返回该函数内部定义的变量。
assert 'a' not in locals()  
assert 'b' not in locals()
#我们判断一下是否有 "a" 及 "b" 变量,如果有就会返回flase,结果是没有
#这样看来所有函数都是在没有调用的情况下立即执行了

#运行后输出如下
'''
Start at : 24-03-02 15:56:00
func1
13
'''

通过以上例子可以看出,lambda函数在简化代码、提高代码可读性和灵活性方面有着独特的优点,尤其在需要快速定义函数作为其他高阶函数参数时尤为常用。python进阶:函数式编程,将函数作为参数,或者将函数作为返回值时可以使用到匿名函数lambda。我们也需要注意:在函数内使用匿名函数:会出现闭包作用域(关于函数作用域我会整理分享一篇文章给大家哒)。

我们在实际编程实践中,如果函数较为复杂或需要复用,建议还是使用传统的def关键字定义标准函数以保持代码清晰易读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值