项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.lambda函数初探

lambda函数又名匿名函数。顾名思义,匿名函数,那肯定就是没有函数名称啦。先看个最简单的例子:
先写个正常的函数:

def f(x):return x+1

很简单,不解释。如果写成lambda函数:

g = lambda x:x+1
print g
print g(2)
<function <lambda> at 0x1007cc668>
3

由此可见g确实是个函数对象。lambda函数都是以lambda开头,后面接参数,参数后面再接冒号,冒号后面则是函数返回的具体内容。

当然也可以在lambda函数中指定多个参数:

f = lambda x,y:x+y+1
print "the result is: ", f(2,3)
the result is:  6

2.为什么要用lambda函数

很多人说,lambda函数只是省略了函数名而已。而且这样的匿名函数,又不能在别的地方被调用,那干嘛还要使用lambda函数呢?
一个东西既然存在,肯定有他存在的合理性与必然性。根据我的使用感受来看,使用lambda函数主要有以下优点:
1.省略了函数名。什么,这不是优点?拜托,请问写代码最难的部分是什么?之前github上做过类似调查,结果"给变量/函数命名"的选项遥遥领先!给变量/函数取个短小精悍容易理解又能正确反应其含义的名字是件很困难的事情好不好!尤其是那些只调用一次的函数,给它起个靠谱的名字,真的是太困难了。lambda函数正好就派上了用场。
2.在有些场合,省略了函数定义的过程,代码更加简洁而且容易理解。

总结起来看的话,lambda函数更多起的是润滑剂或者语法糖的作用,让使用者更为方便。在很多场合,lambda函数也可以用其他方式实现,但那样可能会付出代码更为复杂的代价。

3.与map函数结合

map函数的官方定义如下:

Return a list of the results of applying the function to the items of the argument sequence(s). If more than one sequence is given, the function is called with an argument list consisting of the corresponding item of each sequence, substituting None for missing values when not all sequences have the same length. If the function is None, return a list of the items of the sequence (or a list of tuples if more than one
sequence).
我英文也不是特别好,勉强为大家翻译一把:map函数返回一个结果列表,结果列表里的每个元素是将序列参数里的每个元素传给map中调用的方法求出的。如果参数中包括不止一个序列,那个map中调用的方法的参数将由一个list组成,每个参数对应每个序列的每个元素。当序列长度不相等时,对应的缺失值为None。如果map中没有调用方法,返回的是序列本身(如果序列参数不止一个,返回的是一个列表元祖)。
上面翻译得不是很接地气,给大家举个例子就清楚了:

ret_list = map(lambda x:x+1,[1,2,3])
print "ret_list is: ",ret_list
ret_list is:  [2, 3, 4]

上面的例子中,map函数有两个参数,一个lambda方法,lambda方法返回的是x+1;另外的参数是一个列表,map函数做的事,就是对列表项中的每个数字进行加1的操作,最后返回一个列表。

4.lambda函数转化为列表解析

当然,上面例子中map函数中的lambda方法,可以使用列表解析的方式来实现。

print [x+1 for x in range(1,4)]

这样写,更简洁明了。对于一般人而言,也比lambda更容易理解。另外,列表解析的速度也很快,是非常pythonic的写法。

5.lambda函数需要注意的细节

有如下的代码:

fs = [ lambda n: i+n for i in range(5) ]for k in range(5):print "fs[%d]: " %k,fs[k](4)

此时的输出为:

fs[0]:  8
fs[1]:  8
fs[2]:  8
fs[3]:  8
fs[4]:  8

怪哉。咋不符合预期勒。其实问题就出在变量i上面。因为lambda函数中没有指定参数i,所以这时输入的i为全局变量!

这么写就OK了:

fl = [ (lambda n,i=i: i+n) for i in range(5)]
for k in range(5):print "fl[%d]: " %k,fl[k](4)
fl[0]:  4
fl[1]:  5
fl[2]:  6
fl[3]:  7
fl[4]:  8

python lambda函数 与 函数式编程相关推荐

  1. Python lambda表达式与函数式编程

    Python学习笔记(十二):lambda表达式与函数式编程 原创  2013年07月22日 21:57:47 标签:

  2. 自学python系列10:python的函数和函数式编程

    1.1什么是函数 函数是对程序逻辑进行结构化或过程化的编程方法.这样能节省空间,有助于保持一致性. 函数的创建,使用,引用方法: def foo():print 'bar' foo foo() 1.1 ...

  3. python编写函数_python函数式编程

    函数式编程是使用一系列函数去解决问题,按照一般编程思维,面对问题时我们的思考方式是"怎么干",而函数函数式编程的思考方式是我要"干什么". 至于函数式编程的特点 ...

  4. Python中的匿名函数和函数式编程

    Python中的匿名函数和函数式编程 文章目录 Python中的匿名函数和函数式编程 一.匿名函数 匿名函数的格式: 二.函数式编程 map() filter() reduce() 区别 三.'三目运 ...

  5. lambda函数if_Python3中lambda表达式与函数式编程讲解

    今天小编就为大家分享一篇关于Python3中lambda表达式与函数式编程讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 简单来说,编程中提到的 lam ...

  6. python采用函数式_python -- 函数以及函数式编程

    函数以及函数式编程 到目前为止,我们的Python 代码已经实现了小的分块.它们都适合处理微小任务, 但是我们想复用这些代码,所以需要把大型代码织成可管理的代码段.代码复用的第一步是 使用函数,它是命 ...

  7. 跟着ALEX 学python day3集合 文件操作 函数和函数式编程

    声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...

  8. python函数和函数式编程

    --以下所有内容均来自于蓝鲸运维SaaS开发实战公开课的ppt,我对其进行了整理做了笔记,便于以后查看学习. 函数 声明函数: def hello():print("hello functi ...

  9. 过程或函数的副作用是_Python函数和函数式编程(两万字长文警告!一文彻底搞定函数,建议收藏!)...

    Python函数和函数式编程 函数是可重用的程序代码段,在Python中有常用的内置函数,例如len().sum()等. 在Pyhon模块和程序中也可以自定义函数.使用函数可以提高编程效率. 1.函数 ...

  10. 云函数与函数式编程思想结合会产生什么?

    导语   函数式编程是一种编程范式,也就是如何编写程序的方法论.随着函数式编程被更多人广泛的关注.很多古老的函数式编程语言都重获新生,就连Java这样的老牌的编程语言都开始往函数式编程的方式开始靠近. ...

最新文章

  1. 【css】页面出现两个滚动条以及只有一半页面显示内容的解决方法
  2. 几种常用的JS类定义方法
  3. Publish/Subscribe
  4. php 浏览商品记录,php浏览历史记录
  5. javascript函数式_JavaScript中的函数式编程原理
  6. 1.4 编程基础之逻辑表达式与条件分支 16 三角形判断
  7. tips:Java基本数据类型大小比较
  8. Java实现求阶乘和的三种方法
  9. 【元胞自动机】基于matlab元胞自动机考虑驾驶行为的自动—求解手动驾驶混合交通流问题【含Matlab源码 2060期】
  10. J2EE框架(四)核心设计模式
  11. 简易银行管理系统(C语言)
  12. CT全局与局部重建——详细版
  13. swiper的基本使用
  14. 计算机中怎么设置纸张大小,针式打印机设置,教您针式打印机怎么设置纸张大小...
  15. java dns 解析域名解析_使用Java实现DNS域名解析的简单示例
  16. WEB 应用中的整体结构和层次关系
  17. 指纹浏览器会泄漏隐私吗?
  18. 外贸订单回暖,集装箱持续爆舱,低代码或将成外贸行业新的财富密码
  19. Windows远程连接桌面报错“由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开。请跟服务器管理员联系。”
  20. php记住用户名密码,记住帐号、记住密码、记住表单信息等“记住”的实现

热门文章

  1. cacti中个别流量图超过80M不显示解决办法
  2. java:eclipse:windows开发环境log4j系统找不到指定的路径
  3. 10 个 Linux 网络和监控命
  4. 古老的window程序设计
  5. ThinkPHP的pathinfo模式、路径访问模式及URL重写
  6. C#实现10进制转2进制
  7. 鹰眼跟踪、限流降级,EDAS的微服务解决之道
  8. 【Cocos2d-Js基础教学(2)类的使用和面向对象】
  9. 激情转型 三大战役重塑AMD
  10. mysql 5.5 innodb 优化_mysql 5.5 -- innodb buffer pool优化