python基础之匿名函数详解
⽬录
1.匿名函数介绍
2.语法
3.使⽤场景
4.匿名函数和普通函数的对⽐
5.匿名函数的多种形式
6.lambda 作为⼀个参数传递
7. lambda函数与python内置函数配合使⽤
8.lambda 作为函数的返回值
1.匿名函数介绍
匿名函数指⼀类⽆须定义标识符的函数或⼦程序。Python⽤lambda语法定义匿名函数,只需⽤表达式⽽⽆需申明。
python中lambda怎么使用在python中,不通过def来声明函数名字,⽽是通过 lambda 关键字来定义的函数称为匿名函数。
lambda函数能接收任何数量(可以是0个)的参数,但只能返回⼀个表达式的值,lambda函数是⼀个函数对象,直接赋值给⼀个变量,这个变量就成了⼀个函数对象。
2.语法
lambda 参数:表达式
3.使⽤场景
(1)需要将⼀个函数对象作为参数来传递时,可以直接定义⼀个lambda函数(作为函数的参数或是返回值)
(2)要处理的业务符合 lambda 函数的情况(任意多个参数和⼀个返回值),并且只有⼀个地⽅会使⽤这个函数,不会在其他地⽅重⽤,可以使⽤lambda函数
4.匿名函数和普通函数的对⽐
def sum_func(a, b, c):
return a + b + c
# 将匿名函数对象赋值给 sum_lambda
sum_lambda = lambda a, b, c: a + b + c
print(sum_func(1, 2, 3)) # 6
print(sum_lambda(1, 2, 3)) # 6
5.匿名函数的多种形式
# ⽆参数
lambda_a = lambda :100
print(lambda_a()) # 100
# ⼀个参数
lambda_b = lambda num: num * 10
print(lambda_b(1)) # 10
# 多个参数
lambda_c = lambda a, b, c: a + b + c
print(lambda_c(1, 10, 100)) # 111
# 表达式分⽀
lambda_d = lambda x: x if x > 5 else x + 1
print(lambda_d(4)) # 5
print(lambda_d(6)) # 6
6.lambda 作为⼀个参数传递
def sub_func(a, b, func):
print("a = ", a)
print("b = ", b)
print("a - b = ", func(a, b))
sub_func(3, 2, lambda a, b: a - b)
# 结果:
# a = 3
# b = 2
# a - b = 1
7. lambda函数与python内置函数配合使⽤
sorted是Python中对列表排序的内置函数,我们使⽤lambda来获取排序的key
member_list = [
{"price": 9},
{"price": 999},
{"price": 99}
]
new_list = sorted(member_list, key=lambda dict_: dict_["price"])
print(new_list) # [{'price': 9}, {'price': 99}, {'price': 999}]
number_list = [100, 77, 69, 31, 44, 56]
num_sum = list(map(lambda x: {str(x): x}, number_list))
print(num_sum) # [{'100': 100}, {'77': 77}, {'69': 69}, {'31': 31}, {'44': 44}, {'56': 56}]
map是Python中⽤来做映射的⼀个内置函数,接收两个参数,第⼀个参数是⼀个函数,第⼆个参数是⼀个可迭代对象,map会遍历可迭代对象的值,然后将值依次传递给函数执⾏。我们使⽤lambda来实现map中的函数参数。
8.lambda 作为函数的返回值
def discount_func(discount):
return lambda price: discount * price
p = discount_func(0.8)
print(p) # <function discount_func.<locals>.<lambda> at 0x00000241352BAC10>
print(p(100)) # 80.0
匿名函数可以作为⼀个函数的返回值,上⾯函数discount_func返回⼀个设定了折扣的匿名函数对象,调⽤这个对象,传⼊价格,就可以得到折扣后的价格
到此这篇关于python基础之匿名函数详解的⽂章就介绍到这了,更多相关python匿名函数内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论