lambda是python中定义关键字,且使用频次较高,以下内容为lambda函数的语法、特性、用法和lambda函数改写成python标准函数。
lambda函数语法:
lambda args: expression
- args:参数,参数的形式可以有如下的形式
a, b
a=1, b=2
*args
**kwargs
a, b=1, *args
空
- expression:匿名函数返回值的逻辑表达式,假如expression是a + b, 那匿名函数的返回值就是a + b的值
1
None
a + b
sum(a)
1 if a >10 else 0
lambda函数的特性
- lambda函数没有名字。
- lambda函数输入:传入到参数列表argument_list的值;输出:表达式expression计算得到的值
- lambda函数一般功能简单,只能完成非常简单的功能
lambda函数的用法
- 将lambda函数赋值给一个变量
>>>my_func = lambda a : 0 if a > 1 else 2
>>>my_func(2)
0
- 将lambda函数赋值给一个函数
# 改写代码原来的逻辑
>>>def print_name():
>>> print("code of wang")
>>>print_name = lambda : print('aaa')
>>>print_name()
aaa
# 屏蔽或者改写系统原有的函数
import time
time.sleep = lambda x: None
def time_test():
start = time.time()
time.sleep(3)
stop = time.time()
print(stop-start)
time_test() # 输出的值为2.1457672119140625e-06,也就是说我电脑执行这段代码的时间是0.000002秒左右
- 将lambda函数作为返回值,很好的诠释了python中万物皆对象的特点
>>>def factory_func():
return lambda x, y: x+y
>>>a = factory_func()
>>>a
<function factory_func.<locals>.<lambda> at 0x1012f8e18>
>>>a(1, 2)
3
- 将lambda函数作为参数传递给其他函数,------函数式编程map、filter、sorted、reduce
这里我在自己私下里敲代码时得到a是filter object对象,好多资料和网上的教程写的是python3中filter返回迭代器对象,但是我调用了iter()和next方法都无法获取filter object的值,只能通过list()方法获取,这一点我不明白,希望有大神看到可以帮我解答一下…
# 1.用于filter函数
>>>a = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 6])
>>>list(a)
[3, 6]
# 2.用于sorted函数
# 按照距离5的距离从小到大进行排序
>>>sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
[5, 4, 6, 3, 7, 2, 8, 1, 9]
# 3.用于map函数
>>>new_list = map(lambda x: x+1, [1, 2, 3])
>>>list(new_list)
[2, 3, 4]
# 4.用于reduce函数
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
15
lambda函数转标准函数
1.首先根据lambda函数的功能为函数做一个三个词之内能概括的英文注释
2.将注释作为函数的函数名,args作为参数,expression作为函数的返回值