Lambda 表达式使用说明

Lambda 表达式

Lambda函数又称之为匿名函数,所谓匿名函数就是没有名字的函数。在我们日常的开发过程中,其实存在很多函数其实只是临时使用一次,或者这个函数的功能本身就非常的简单,例如就是做个加法或者交换下位置一类的,在这个时候,如果还是采用传统的方法去定义一个标准的函数,就显得多余了。

Lambda语法格式

语法格式:==lambda arguments: ==expression====

  • lambda: 函数关键字
  • arguments: 函数的参数列表,参数之间用,进行分割
  • expression:返回的表达式,且表达式只能有一个。

举例:

实现一个最常见的x*x的函数。

>>> square = lambda x:x*x
>>> square
<function <lambda> at 0x0000000002705B38>
>>> y = square(2)
>>> y
4

从上面的例子可以看到第一个x 是代表的参数,后面的x*x是函数的内容。

应用举例

这里讨论的filter函数和下面讨论的map函数并非lambda函数的一部分,是完全独立的,属于python的内建函数,详情可以参考

lambda 与filter函数联动

==filter(function,iterable)==

iterable 是迭代器,指向需要可能要返回的数据;function是过滤的条件,其返回值是true or false。当filter函数返回为真时,迭代函数返回对应的值。

>>> test = [1,2,3,4,5]
>>> ret = list(filter(lambda x:(x>2),x+5))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name ‘x‘ is not defined

>>> ret = list(filter(lambda x:(x>2),test))
>>>
>>> ret
[3, 4, 5]
>>> 

我们先看上面代码中运行正常的这部分:先看filter函数:function是一个lambda 函数 lambda x:(x>2) 意思是参数值必须要大于2。根据前面的解释,如果function为真,那么迭代函数就返回对应的指向值,所以得到的数据是3,4,5。

看了正确的部分,我们再来看错误的部分:第一个错误的部分是迭代函数写成了x+5,想表达的意思是参数值x+5,但实际上这里的x 是需要指的传入的值,而不是参数值,因此报的错误也是非常的明显:x没有定义。

与map函数联合

==map(function,iterable,...)== 首先map 函数主要用于映射关系,其与filter一样,后面是迭代器。其返回值是一个map对象,需要转变为列表或者元祖才能查看其中的内容。如:

>>> list(map(lambda x: x*2,range(5)))
[0, 2, 4, 6, 8]
>>> range(5)
[0, 1, 2, 3, 4]

从上面的例子可以看出,map函数主要是将iterable中的值作为参数逐个传给function,经过函数执行以后,返回一个list结果。但需要注意的是刚才我们看到的函数是可以有多个参数的,如果在多个函数下结果又是如何了,其实是一样的。如下:

>>> list(map(lambda x,y:x+y,range(1,5),range(5,9)))
[6, 8, 10, 12]

Reduce函数

Reduce函数很多时候是和map函数合并用的,MR模型的经典就不具体描述了。将上面的map函数修改一下:

>>> reduce(lambda x,y:x+y,range(1,5))
10

可以看到reduce的结果就是一个结果整数了,而不是像map那样是一个List。

实际上reduce的函数形式如下:reduce(function,sequence,starting_value)。对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用.

参考文档:

http://blog.csdn.net/liang19890820/article/details/72846966

原文地址:https://www.cnblogs.com/angellst/p/8445414.html

时间: 2024-10-22 06:49:27

Lambda 表达式使用说明的相关文章

Lambda表达式-使用说明

jdk8已经发布4年,其中有一个特性:Lambda,它是一个令开发者便捷开发的一种方式,Lambda Expression (Lambda表达式)是为了让java提供一种面向函数编程,原本在jdk8之前只支持面向对象编程, 而函数式编程则是对行为的抽象(将行为作为一个参数进行传递),接下来通过例子来说明: 这是一个线程对象,传入匿名内部类的例子: new Thread(new Runnable() { @Override public void run() { System.out.printl

Lambda表达式实战视频教程

视频教程地址: https://my.oschina.net/u/3217554/blog/1507456 1:Lambda表达式及函数式接口介绍 2:Lambda表达式详解 3:方法的引用(一) 4:方法的引用(二) 5:Stream API(一) 6:Stream API(二) 7:Lambda表达式.方法的引用.Stream API实战

lambda表达式封装对数据库的查询

前言: 1.为什么要封装lambda表达式数据库查询,原因有一下几点: 1.1.在以往的开发中进行数据库表查询时,其实所需要的字段就是其中几个,但是在开发中,开发者往往习惯select * 进行查询,当数据多和用户量多时,查询的效率会降低. 1.2.在写查询where条件的时候,总是用string.format去拼接字符串,开发效率低. 1.3.代码不够优雅,代码中嵌套和多sql语句,如果是表字段发生改变时编译器检查不出来,代码出错的概率大. 1.4.本着 write less  do more

Lambda表达式

import org.junit.Test; import java.util.Comparator; import java.util.function.Consumer; /** * 一.Lambda 表达式基础语法:Java8中引入一个新的操作符"->"该操作符称为箭头操作符或Lambda操作符 * 箭头操作符将Lambda表达式拆分为两部分: * 左侧: Lambda表达式的参数列表 * 右侧: Lambda表达式中所需要执行的功能,即Lambda体 * * 语法格式一:

C#学习日记25---匿名方法 与 Func委托 与 lambda表达式

       在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法.C# 2.0 引入了匿名方法(委托),而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式. 匿名委托(方法): 匿名委托的叫法并不准确,准确的应该叫做匿名方法,(总之两者是一个意思啦).前面  委托类型  中我已经提到过,委托是用于引用与其具有相同标签的方法.换句话说,您可以使用委托对象调用可由委托引用的方法(参数是方法名).而匿名方法则是将代码块作为委托参数(参数是实

java8之lambda表达式(构造器引用)

构造器引用同方法引用类似,不同的是在构造器引用中方法名是new.例如,Button::new表示Button类的构造器引用.对于拥有多个构造器的类,选择使用哪个构造器取决于上下文.假设你有一个字符串列表,并且希望调用Button类的构造器使用列表中的字符串来构造一个按钮列表,可以使用如下表达式: List<String> labels = ....; Stream<Button> stream = labels.stream().map(Button::new); List<

lambda表达式+python内置函数

传统的定义函数方式如下 def f1(): return 123 lambda表达式定义函数 f2 = lambda : 123 python3的内置函数 1.abs 绝对值 i = abs(-11) print (i) 输出结果是11 abs = absolute 2,all 循环参数,如果每个元素都为真,则返回为真 r = all([True, True]) print (r) 在python中 0 () [] ''和 None是False(空值都是假的) r = all(["123&quo

兰姆达表达式Lambda 表达式(C# 编程指南)

转https://msdn.microsoft.com/zh-cn/library/bb397687.aspx Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数.通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.Lambda 表达式对于编写 LINQ 查询表达式特别有用. 若要创建 Lambda 表达式,需要在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块.例如,lambda 表达式 x => x

JDK8新特性 Lambda表达式

一.接口的默认方法二.Lambda 表达式三.函数式接口四.方法与构造函数引用五.Lambda 作用域六.访问局部变量七.访问对象字段与静态变量八.访问接口的默认方法九.Date API十.Annotation 注解:支持多重注解 一.接口的默认方法 Java8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下: [java] view plain copy public interface Formula { double calcu