设为首页 - 加入收藏 天门站长网 (http://www.0728zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: wifi 互联 最佳 市场
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

细说Python的Lambda函数用法,建议收藏

发布时间:2019-09-04 11:32 所属栏目:[优化] 来源:叫我小包总
导读:在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数。今天我就和大家聊聊lambda函数,在Python编程中,大家习惯将其称为表达式。 1.为什么要用lambda函数? 先举一个例子:将一个列表里的每个元素都平方。 先用def

在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数。今天我就和大家聊聊lambda函数,在Python编程中,大家习惯将其称为表达式。

细说Python的Lambda函数用法,建议收藏

1.为什么要用lambda函数?

先举一个例子:将一个列表里的每个元素都平方。

先用def来定义函数,代码如下

  1. def?sq(x):?
  2. ????return?x*x?
  3. ?
  4. map(sq,[y?for?y?in?range(10)])?

再用lambda函数来编写代码

  1. map(lambda?x:?x*x,[y?for?y?in?range(10)])?

从这个简单的例子,我们可以看出,用lambda函数首先减少了代码的冗余,其次,用lambda函数,不用费神地去命名一个函数的名字,可以快速的实现某项功能,最后,lambda函数使代码的可读性更强,程序看起来更加简洁。

从上面这个简单的例子,也可以看出来lambda函数的语法是唯一的,其形式如下:

  1. lambda?argument_list:expersion?

语法中的argument_list是参数列表,它的结构与Python中函数(function)的参数列表是一样的,例如

  1. a,b?
  2. a=1,b=2?
  3. *args?
  4. **kwargs?
  5. a,b=1,*args?
  6. 空?
  7. ....?

语法中的expression是一个关于参数的表达式,表达式中出现的参数需要在argument_list中有定义,并且表达式只能是单行的。比如以下的一些合法的表达式

  1. 1?
  2. None?
  3. a+b?
  4. sum(a)?
  5. 1?if?a?>10?else?0?
  6. ......?

除了上面提到的lambda函数的优点外,我看有的文章说用lambda函数会提高效率,那究竟是不是呢?我们写一段代码来验证一下

  1. import?time?
  2. ?
  3. ?
  4. #?测试的Def函数?
  5. def?square1(n):?
  6. ????return?n?**?2?
  7. ?
  8. ?
  9. #?测试的Lambda函数?
  10. square2?=?lambda?n:?n?**?2?
  11. ?
  12. print(time.time())?
  13. ?
  14. #?使用Def函数?
  15. i?=?0?
  16. while?i?
  17. ????square1(100)?
  18. ????i?+=?1?
  19. ?
  20. print(time.time())?
  21. ?
  22. #?使用lambda函数?
  23. i?=?0?
  24. while?i?
  25. ????square2(100)?
  26. ????i?+=?1?
  27. ?
  28. print(time.time())?
  29. ?
  30. 1413272496.27?
  31. 1413272703.05?(Def???函数:207s)?
  32. 1413272904.49?(Lambda函数:201s)?

从上面可以看出,两种的所需的时间差不多,效率丝毫不受影响。

2.lambad函数的用法上面也讲到了匿名函数的优点,那它到底有哪些用处呢?

(1)直接赋给一个变量,然后再像一般函数那样调用

  1. c=lambda?x,y,z:x*y*z?
  2. c(2,3,4)?
  3. ?
  4. 24?

当然,也可以在函数后面直接传递实参

  1. (lambda?x:x**2)(3)?
  2. 9?

(2)将lambda函数作为参数传递给其他函数比如说结合map、filter、sorted、reduce等一些Python内置函数使用,下面举例说明。

  1. fliter(lambda?x:x%3==0,[1,2,3,4,5,6])?
  2. ?
  3. [3,6]?
  1. squares?=?map(lambda?x:x**2,range(5)?
  2. print(lsit(squares))?
  3. [0,1,4,9,16]?

与sorted函数结合使用,比如:创建由元组构成的列表:

  1. a=[('b',3),('a',2),('d',4),('c',1)]?

按照第一个元素排序

  1. sorted(a,key=lambda?x:x[0])?
  2. [('a',2),('b',3),('c',1),('d',4)]?

按照第二个元素排序

  1. sorted(a,key=lambda?x:x[1])?
  2. [('c',1),('a',2),('b',3),('d',4)]?

与reduce函数结合使用

  1. from?functools?import?reduce?
  2. print(reduce(lambda?a,b:'{},{}'.format(a,b),[1,2,3,4,5,6,7,8,9]))?
  3. ?
  4. 1,2,3,4,5,6,7,8,9?

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章