匿名函数和lambda:

lambda [args1,[args2]] : expression

python 使用lambda来创建匿名函数,匿名函数不需要以标准的方式进行创建,但是作为函数,它们也能有参数,一个完整的lambad语句代表了一个表达式,这个表达式的定义体和声明体必须在同一行。

1. 参数是可选的

lambda : True

在上面的例子中,没有使用参数创建了一个函数对象,但是在程序中没有在任何地方保存它也没有调用它,这个函数对象的引用计数在函数创建的时候被设置为True,但是因为没有引用被保存下来计数很快就会到0,然后被垃圾回收机制回收。针对于这种情况lambda最好使用在不需要多次调用的函数定义上

true = lambda: True

true()   # 会输出True

2. 使用参数构建lambda

def add(x, y): return x + y
lambda x,y: x+y

上面定义的两个函数计算效果是等价的。

3. 函数式编程的几个常用函数filter map reduce

1. filter(func, seq) 调用一个布尔函数,func用来迭代遍历每个seq中的元素,返回一个使func返回值为true的元素的序列

 data = [1, 2, 3, 4, 5, 6, 7, 8]

 def testFilter():
result = filter(lambda x:x%2, data)
for eachitem in result:
print(eachitem) if __name__ == "__main__":
testFilter()

上面的例子查找返回集合中奇数的列表,

针对与filter函数的效果其实有一种更好的方式,列表表达式

 data = [1, 2, 3, 4, 5, 6, 7, 8]

 def testFilter():
print([item for item in data if item % 2])

2. map内建函数和filter相似,都是通过函数来处理序列,但是不像filter,map将函数调用映射到序列的每个元素上,并返回一个函数所有返回值的列表。

 data = [1, 2, 3, 4, 5, 6, 7, 8]

 def testmap():
result = map(lambda x: x**2, data)
for item in result:
print(item) def testmap2():
result = map(lambda x,y:x+y,data[:3],data[4:])
for item in result:
print(item) if __name__ == "__main__":
testmap()
testmap2()

上面的代码要注意一点:如果map函数中传入的func有一个参数,那么在map传入的一个序列,如果map函数中传入的func有多个参数,那么传入的序列个数为相应的个数,并且在同时将每一个序列中相应的位置的元素一同传入到func中。将所有的返回值组成列表。

3. reduce 使用一个二元函数(接收两个值作为输入,一个输出),一个序列和一个可选的初始化器。

函数通过取出序列的头俩个值传入func中计算,将计算结果返回,和序列的下一个元素一起作为参数传递到func中,直到遍历所有的元素之后返回一个单一的值。

  reduce(func,(1,2,3)) == func(func(1,2),3)

 from functools import reduce
data = [1, 2, 3, 4, 5, 6, 7, 8] def testreduce():
result = reduce(lambda x,y: x + y, data)
print(result) if __name__ == "__main__":
testreduce()

注意在python3之后reduce不再是内建函数而是改在functools中了。

python lambda的更多相关文章

  1. python lambda函数详细解析(面试经常遇到)

    1 作用:通常是用来在python中创建匿名函数的 2 格式: lambda 参数[,参数] : 表达式 3 注意: (1)lambda定义的是单行函数, 如果需要复杂的函数,应该定义普通函数 (2) ...

  2. Python lambda 表达式有何用处,如何使用?

    在看Python教程的时候,被 lambda 的解释给难住了,之前没有这么用过. 在<简明Python教程>上的解释: [摘录如下:] lambda语句被用来创建新的函数对象,并且在运行时 ...

  3. Python lambda介绍

    转自:http://www.cnblogs.com/evening/archive/2010/03/29/2423554.html Python lambda 介绍   在学习python的过程中,l ...

  4. python lambda简单介绍

    python lambda 在python中,如果想要创建函数需要使用关键字def,而如果想要创建匿名函数,就需要使用lambda. lambda创建的函数和def创建的函数有什么区别? def创建的 ...

  5. Python Lambda 的简单用法

    下面代码简单举例介绍以下 lambda的用法. from functools import reduce #1 python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而de ...

  6. python lambda表达式简单用法【转】

    python lambda表达式简单用法 1.lambda是什么? 看个例子: g = lambda x:x+1 看一下执行的结果: g(1) >>>2 g(2) >>& ...

  7. Python Lambda & Functional Programming

    Python Lambda & Functional Programming 函数式编程 匿名函数 纯函数 高阶函数 # higher-order functions def apply_tw ...

  8. Python lambda函数

    python允许定义单行的小函数,定义lambda函数的形式如下: lambda 参数:表达式lambda函数默认返回表达式的值,可接收任意个参数,包括可选参数,但是表达式只有一个.

  9. Python: Lambda Functions

    1. 作用 快速创建匿名单行最小函数,对数据进行简单处理, 常常与 map(), reduce(), filter() 联合使用. 2. 与一般函数的不同 >>> def f (x) ...

随机推荐

  1. CocoaPods第三方库管理 iOS

    越来越多的SVN管理,越来越多的工程文件,我不能总是那么一个一个的把第三方库拖进去,我厌倦了拖拽和配置,我找到了替代方法--CocoaPods 补充一下:最近在给新机子安装时 发现 sudo gem ...

  2. MQTT 消息 发布 订阅

    当连接向一个mqtt服务器时,clientId必须是唯一的.设置一样,导致client.setCallback总是走到 connectionLost回调.报connection reset.调查一天才 ...

  3. XSS攻击测试代码

    '><script>alert(document.cookie)</script>='><script>alert(document.cookie)&l ...

  4. <<< php程序在运行后报“internal server error”错误

    上传的php程序在运行后报“internal server error”错误,检查以下两方面: 1.请您检查php程序的属性是否设置为755,如果php程序的属性不是755,那么运行的时候会报“int ...

  5. 使用VS2010创建WebService 发布、测试

    http://blog.sina.com.cn/s/blog_45eaa01a0102vopl.html 1 打开VS2010,菜单    文件->新建->项目 2 选择[ASP.net ...

  6. C#成员函数直接调用和反射+委托的性能比较

    using System; using System.Reflection; using System.Diagnostics; namespace Refl { class Test { publi ...

  7. C++计算几何库

    http://www.cgal.org/ http://shapeop.org/

  8. RAID技术介绍

    RAID技术介绍 简介 RAID是一个我们经常能见到的名词.但却因为很少能在实际环境中体验,所以很难对其原理 能有很清楚的认识和掌握.本文将对RAID技术进行介绍和总结,以期能尽量阐明其概念. RAI ...

  9. APP的消息推送(极光推送)

    APP的消息推送,使用的第三方平台是极光推送 简单案例(以Thinkphp为例): 1.下载下载PHPSDK 2.把PHPSDK目录下的jpush-api-php-client-3.5.1\src\J ...

  10. Canvas实例

    <!doctype html> <html> <head> <meta charset="utf-8" /> <title&g ...