匿名函数和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. Nginx编译配置杂记

    1.http://nginx.org/download/nginx-1.6.3.tar.gz 2. [root@track nginx-1.6.3]#./configure --prefix=/usr ...

  2. Codeforces 2016 ACM Amman Collegiate Programming Contest B. The Little Match Girl(贪心)

    传送门 Description Using at most 7 matchsticks, you can draw any of the 10 digits as in the following p ...

  3. Spring 4支持的Java 8新特性一览

    有众多新特性和函数库的Java 8发布之后,Spring 4.x已经支持其中的大部分.有些Java 8的新特性对Spring无影响,可以直接使用,但另有些新特性需要Spring的支持.本文将带您浏览S ...

  4. K米点歌APP评测

    K米APP评测 产品简介 K米点歌是一款免费的社交K歌手机应用,其手机点歌功能主要在KTV.夜总会,酒吧等K歌场所中使用,当前提供iPhone版本及安卓版本下载使用.——百度百科 评测版本 K米点歌4 ...

  5. C# 自定义Section

    一.在App.config中自定义Section,这个使用了SectionGroup <?xml version="1.0" encoding="utf-8&quo ...

  6. 【JWT】JWT+HA256加密 Token验证

    目录 Token验证 传统的Token验证 JWT+HA256验证 回到顶部 Token验证 最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twi ...

  7. Codeforces#262_1002

    Codeforces#262_1002 B. Little Dima and Equation time limit per test 1 second memory limit per test 2 ...

  8. 利用 autoconf 和 automake 生成 Makefile 文件

    一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...

  9. synchronized在jvm底层是如何实现的

    目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea.本文并不比较synchronized与Loc ...

  10. sublime 编译运行C程序

    { "cmd": ["gcc", "${file}", "-o","${file_path}/${file_b ...