lambda表达式
经常遇到要用 lambda 表达式的场景,于是还是总结下吧。
lambda 表达式的作用是简化代码,能给没有函数指针的编程语言提供函数式的接口(方便函数式编程,包括闭包等),创建匿名函数等。函数式编程找时间写写 😋
python中的lambda表达式
python lambda 表达式的语法为 lambda param1, param2, param3: expression(只能有一个表达式),lambda 表达式的作用是根据参数列表,计算表达式的值并返回。
表达式的一些常见形式 a+b, func(a), val1 if exp1 else val2
# 1.
plus1 = lambda x: x+1
print((lambda x: x+2)(2))
print(plus1(1))
# 2.
func = lambda x: 2 * plus1(x)
print(func(2))
# 3.
func2 = lambda x: x + 1 if x < 5 else 5
print(func2(5), func2(3))
python 中 lambda 表达式捕获变量是在运行时,比如
a = 5
exp = lambda x: a * x
a = 7
print(exp(1))
# 输出 7,因为 exp 是在调用时捕捉当前的 a 值
如果想在定义时捕捉值,则应该使用 默认参数 的方法
a = 5
exp = lambda x, a=a: a * x
a = 7
print(exp(1))
# 输出结果是 5
因为上述特点,一个常见错误是
funcs = [lambda x: x + i for i in range(5)]
for func in funcs:
print(func(0))
# 输出结果是 4, 4, 4, 4, 4
# 应该使用默认参数的形式修改
funcs = [lambda x, i=i: x + i for i in range(5)]
for func in funcs:
print(func(0))
# 现在输出就是 1, 2, 3, 4, 5
感觉还是不要在循环里乱用 lambda 表达式好一点 😢
javascript中的lambda表达式
详见 👉 箭头函数 - JavaScript|MDN,非常详细了
c++中的lambda表达式
偷个懒,不想写了 😶
lambda 表达式的常见应用
感觉这部分内容说多不多,说少不少。比如 pandas 中的 apply 方法,包括返回一个 lambda 表达式的函数,然后又感觉和闭包扯上关系了,等写了函数式编程再来补充吧 😴
References
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ruoy's Blog!
评论
