Python lambda 表达式 【学习笔记】

前言

今天简单学习了下 lambda 表达式,对其有一些简单的理解。

个人感觉只是写法上的改变,将简单的函数改写为了一句更为简单的表达式,使得代码变得简洁些,但可读性稍微有些降低,代码性能应该是没有影响的。

先来看一段代码示例:

def test1():
    lam = lambda x, y: x + y
    print(lam(10, 20))

if __name__ == '__main__':
    test1()

### 输出30

这样一看其实还是蛮好理解的嗷,就是简单的改变了函数的变现形式,下面我们来做更详细的介绍。

语法

  • lambda 表达式的语法只包含一个语句:lambda [arg1,arg2,.....]:expression
  • arg 是用户自定义参数,即一个函数的传入参数,当然咱们也可以不定义参数,即无参数的函数,就像这样lambda: 10 + 20
  • expression 是表达式的内容,即函数内部的处理逻辑

特性

  • 匿名函数
    即没有函数名的函数,当然你也可以自定义一个变量来指向该函数,就像我在开头写的那个式子一样,当然这并不被推荐。
  • 拥有自己的命名空间
    不能访问参数列表之外或全局命名空间里的变量,只能完成非常简单的功能。
  • 可以进行输入和输入
    输入是传入的参数,输出是表达式计算出的结果,比如在下面这例子中,上面的sum函数实际上跟下面 用lambda表达式写的 sum 的含义是一样的,使用方法也是一样的,也包括参数和返回值
def sum(x, y):
    return x + y

sum = lambda x, y: x + y

推荐的用法

尽管上面我写的例子大都是用一个变量来引用lambda表达式再去使用,但其实它并不是这么用的,它一般会结合以下四个函数来使用。

  • filter函数
    此时lambda函数用于指定过滤列表元素的条件。例如 filter(lambda x: x % 3 == 0, [1, 2, 3]) 指定将列表 [1,2,3] 中能够 被3整除 的元素过滤出来,其结果是[3]。

  • sorted函数
    此时lambda函数用于指定对列表中所有元素进行排序的准则。例如 sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x)) 将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9] 按照元素与5距离从小到大进行排序,其结果是 [5, 4, 6, 3, 7, 2, 8, 1, 9]。

  • map函数
    此时lambda函数用于指定对列表中每一个元素的共同操作。例如 map(lambda x: x+1, [1, 2,3]) 将列表 [1, 2, 3] 中的元素分别加1,其结果[2, 3, 4]。

  • reduce函数
    此时lambda函数用于指定列表中两两相邻元素的结合条件。例如 reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9]) 将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是’1, 2, 3, 4, 5, 6, 7, 8, 9’。

注意

在 PEP 8: E731 中已经指出,如果你在写的 lambda表达式 需要赋给另一个变量,那么请使用 def 而不要使用 lambda,如图:
在这里插入图片描述
这是因为这种写法并不能体现 lambda表达式 的特色,基本只是复制 def 的功能,同时这个变量名其实也不是 lambda表达式 真正的函数名,还显得比 def 更容易混淆。

参考

「肖哥shelwin」https://blog.csdn.net/zjuxsl/article/details/79437563
「Nick Peng」https://blog.csdn.net/PY0312/article/details/88956795
「taomeechildren」https://blog.csdn.net/taomeechildren/article/details/120023850

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿杆.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值