求几个用java lambda 匿名函数写的函数

求几个用lambda写的函数
[问题点数:40分,结帖人doudoushen]
本版专家分:0
结帖率 99.61%
CSDN今日推荐
本版专家分:76846
2007年4月 C/C++大版内专家分月排行榜第二2007年3月 C/C++大版内专家分月排行榜第二2007年2月 C/C++大版内专家分月排行榜第二2007年1月 C/C++大版内专家分月排行榜第二2006年12月 C/C++大版内专家分月排行榜第二
2007年9月 C/C++大版内专家分月排行榜第三2007年8月 C/C++大版内专家分月排行榜第三2006年11月 C/C++大版内专家分月排行榜第三
本版专家分:0
结帖率 99.61%
本版专家分:76846
2007年4月 C/C++大版内专家分月排行榜第二2007年3月 C/C++大版内专家分月排行榜第二2007年2月 C/C++大版内专家分月排行榜第二2007年1月 C/C++大版内专家分月排行榜第二2006年12月 C/C++大版内专家分月排行榜第二
2007年9月 C/C++大版内专家分月排行榜第三2007年8月 C/C++大版内专家分月排行榜第三2006年11月 C/C++大版内专家分月排行榜第三
本版专家分:0
结帖率 99.61%
本版专家分:76846
2007年4月 C/C++大版内专家分月排行榜第二2007年3月 C/C++大版内专家分月排行榜第二2007年2月 C/C++大版内专家分月排行榜第二2007年1月 C/C++大版内专家分月排行榜第二2006年12月 C/C++大版内专家分月排行榜第二
2007年9月 C/C++大版内专家分月排行榜第三2007年8月 C/C++大版内专家分月排行榜第三2006年11月 C/C++大版内专家分月排行榜第三
本版专家分:0
结帖率 99.61%
本版专家分:76846
2007年4月 C/C++大版内专家分月排行榜第二2007年3月 C/C++大版内专家分月排行榜第二2007年2月 C/C++大版内专家分月排行榜第二2007年1月 C/C++大版内专家分月排行榜第二2006年12月 C/C++大版内专家分月排行榜第二
2007年9月 C/C++大版内专家分月排行榜第三2007年8月 C/C++大版内专家分月排行榜第三2006年11月 C/C++大版内专家分月排行榜第三
本版专家分:0
结帖率 99.61%
本版专家分:76846
2007年4月 C/C++大版内专家分月排行榜第二2007年3月 C/C++大版内专家分月排行榜第二2007年2月 C/C++大版内专家分月排行榜第二2007年1月 C/C++大版内专家分月排行榜第二2006年12月 C/C++大版内专家分月排行榜第二
2007年9月 C/C++大版内专家分月排行榜第三2007年8月 C/C++大版内专家分月排行榜第三2006年11月 C/C++大版内专家分月排行榜第三
本版专家分:0
结帖率 99.61%
本版专家分:39985
2014年11月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!|
CSDN今日推荐如何定义一个可以接受lambda表达式作为参数的函数_百度知道
如何定义一个可以接受lambda表达式作为参数的函数
我有更好的答案
1. 不必对每个lambda都生成一份doSomething的代码,减少编译时间及二进制文件体积2. 使用template编译错误信息对新手来说较难看懂3. 使用template会迫使doSomething的逻辑必须写在头文件文件里,符号定义也不能在自己的编译单元里。
采纳率:97%
来自团队:
为您推荐:
其他类似问题
lambda表达式的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;
欢迎您订阅我们的技术周刊
我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,
欢迎分享您的观点,经验,技巧,心得
让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;
本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com
订阅邮件周刊
少年,不要滥用箭头函数啊:JS中lambda表达式的优缺点和使用场景
注意 转载须保留原文链接,译文链接,作者译者等信息。&&
在ES6大行其道的今天,不应用点ES6特性似乎有些政治不正确。最近刚好有个Node的项目,最低要支持到nodejs 4.0,在看了下ES6的支持度,我想使用的特性基本都有支持,遂决定在新项目中采用ES6来写。当然第一件事情就是毫不留情地消灭var,项目中能用const的地方不用let,能用let的地方不用var。第二件事情就是使用劳动人民喜闻乐见的箭头函数替代function。当我心满意足地看到满屏的=&时,现实给了我一记响亮的耳光——改过之后的程序错误百出!所以,当我们使用箭头函数时,一定要搞清楚箭头函数是什么回事,适用于什么场景。本文就针对以上问题来讨论下箭头函数。箭头函数是什么?箭头函数的语法我就不讲了,相信大家都见识过。跟我一样,大家喜欢箭头函数90%的原因是它好看。除了好看,它是不是与function等价呢?肯定不等价,因为TC39不可能仅因为好看而引入一个语法糖(class除外)。箭头函数的渊源可以追溯到上古时期一个叫lambda演算的东西。lambda演算是数学家提出来的,有些数学家跟我们程序员一样也很懒,数学定理那么多,今天要证三角定律,明天要证勾股定律,累不累!那能不能将所有的证明问题用一个统一的体系进行形式化描述,然后由机器来完成自动推导呢?lambda演算就是干这个的,图灵也搞了一套体系叫图灵机,两者是等价的。关于lambda演算说了这么多,好像跟今天要讲的箭头函数没什么关系?其实是有关系的,lambda演算深刻影响了箭头函数的设计。数学家们喜欢用纯函数式编程语言,纯函数的特点是没有副作用,给予特定的输入,总是产生确定的输出,甚至有些情况下通过输出能够反推输入。要实现纯函数,必须使函数的执行过程不依赖于任何外部状态,整个函数就像一个数学公式,给定一套输入参数,不管是在地球上还是火星上执行都是同一个结果。箭头函数要实现类似纯函数的效果,必须剔除外部状态。所以当你定义一个箭头函数,在普通函数里常见的this、arguments、caller是统统没有的。箭头函数没有this箭头函数没有this,那下面的代码明显可以取到this啊:function foo() {
this.a = 1
let b = () =& console.log(this.a)
// 1以上箭头函数中的this其实是父级作用域中的this,即函数foo的this。箭头函数引用了父级的变量,构成了一个闭包。以上代码等价于:function foo() {
this.a = 1
let self = this
let b = () =& console.log(self.a)
// 1箭头函数不仅没有this,常用的arguments也没有。如果你能获取到arguments,那它一定是来自父作用域的。function foo() {
return () =& console.log(arguments[0])
foo(1, 2)(3, 4)
// 1上例中如果箭头函数有arguments,就应该输出的是3而不是1。一个经常犯的错误是使用箭头函数定义对象的方法,如:let a = {
bar: () =& console.log(this.foo)
//undefined以上代码中,箭头函数中的this并不是指向a这个对象。对象a并不能构成一个作用域,所以再往上到达全局作用域,this就指向全局作用域。如果我们使用普通函数的定义方法,输出结果就符合预期,这是因为a.bar()函数执行时作用域绑定到了a对象。let a = {
bar: function() { console.log(this.foo) }
// 1另一个错误是在原型上使用箭头函数,如:function A() {
this.foo = 1
A.prototype.bar = () =& console.log(this.foo)
let a = new A()
//undefined同样,箭头函数中的this不是指向A,而是根据变量查找规则回溯到了全局作用域。同样,使用普通函数就不存在问题。通过以上说明,我们可以看出,箭头函数除了传入的参数之外,真的是什么都没有!如果你在箭头函数引用了this、arguments或者参数之外的变量,那它们一定不是箭头函数本身包含的,而是从父级作用域继承的。什么情况下该使用箭头函数到这里,我们可以发现箭头函数并不是万金油,稍不留神就会踩坑。至于什么情况该使用箭头函数,《You Don’t Know JS》给出了一个决策图:
以上决策图看起来有点复杂,我认为有三点比较重要:箭头函数适合于无复杂逻辑或者无副作用的纯函数场景下,例如用在map、reduce、filter的回调函数定义中;不要在最外层定义箭头函数,因为在函数内部操作this会很容易污染全局作用域。最起码在箭头函数外部包一层普通函数,将this控制在可见的范围内;如开头所述,箭头函数最吸引人的地方是简洁。在有多层函数嵌套的情况下,箭头函数的简洁性并没有很大的提升,反而影响了函数的作用范围的识别度,这种情况不建议使用箭头函数。
原文地址:
ssdsdszxxzxz
s;lslsdsdsl
@蒲文章是对的就是好的呀
const test = data =&
console.log(test.prototype) // 输出 underfined
强调文本啦咯啦咯哦咯我这破肉某座婆婆强调文本刺激筋疲力尽
对方尴尬的噶的啊是的噶读书噶都是咖色蛋糕啊是的噶蛋糕
阿斯顿发发发发的说法阿斯顿发大方啊速度发多
少发啊速度发多少法地方啊时代发生敌法
@蒲风尼 #0
箭头函数是比较影响可阅读性的,并且它并不美观(博主你是不是对美观有什么误解)!!!
箭头函数的优势似乎是它的纯函数式思想,但是纯函数式的结果并不只是箭头函数可以提供,不幸运的是几乎所有语言的基础特性都已经提供了纯函数式的实现方式,所以纯函数式也不可以说是它的特性。于是箭头函数的特性看上去似乎只剩下写法的简洁了,这一点是毋庸置疑的,但是任何好处都会付出成本,这种简洁的好处是以损失可阅读性为代价的,所以大多数情况下,其实并不推荐使用箭头函数呢!
alert(123)
&热门文章 - 分享最多
&相关阅读 - JS学习
&关键字 - JavaScript
&欢迎订阅 - 技术周刊
我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;
我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
函数, lambda表达式
摘要:函数函数:简单的理解,就是一次执行很多行代码函数的返回值函数的参数,和变量没区别例:defhello():print&helloworld&hello()hello()打印结果:helloworldhelloworld返回值:defhello():print&helloworld&printhello#指函数,就是函数在内存里的一个地址.printhello()#指函数返回值defhello():#print&hellowor
函数:简单的理解,就是一次执行很多行代码
函数的返回值
函数的参数,和变量没区别
def hello():
print &hello world& hello() hello()
打印结果: hello worldhello world
def hello():
print &hello world& print hello
# 指函数,就是函数在内存里的一个地址. print hello() # 指函数返回值 def hello():
# print &hello world&
return 2017 hello
print hello()
def hello(name):
print &Hello %s& % name
return 2017hello(&yangbin&)print hello(&asd&)执行结果: Hello yangbinHello asd2017
print是打印出来看.return是返回值.
5阶乘, 54321f(n)
def f(num):
for i in range(1, int(num)+1):
count = i * int(num)
print countf(5) 执行结果:
关键字参数的调用,和位置无关,只和名字相关:
def hello(name,age):
return name,ageprint hello(&yangbin&, 22)print hello(age = 22, name = &yangbin&) 执行结果: ('yangbin', 21)('yangbin', 22)
使代码更健壮:
def hello(name = &yangbin&,age = 22):
return name,ageprint hello(&yangbin&, 22)print hello() 执行结果: ('yangbin', 22)('yangbin', 22)
参数不固定的时候:
关键字参数调用的时候,可读性好关键字参数在函数定义的时候,提供默认值
开头的参数,收集所有剩下参数(位置参数) 元组
开头的参数,收集所有剩下参数(关键字参数) 字典
1.多个函数之间,尽量避免全局变量
通用的函数:变化的东西,都由参数来定函数当成参数传递
python自带的sorted函数
sorted(待排序的list,key传递一个函数-决定根据元素的哪个属性进行排序)
http://blog.csdn.net/zyl/article/details/
函数当成参数,传给了sorted
lambda 就是没有名字的函数(特别简单的,只有return语句的函数)语法:
lambda 参数:返回值
def hello(x):
return x[1]print hello([2,3])hello = lambda x:x[1]print hello([2,3])执行结果: 33
函数作用域:
函数内部的变量和全局变量不是在一个区域里的,函数内部变量,现在函数内部找,找不到才会去全局找函数内部作用域赋值,对外部无影响函数内部想修改全局变量,要用global声明一下
get()函数:
get() 函数返回指定键的值,如果值不在字典中返回默认值。语法:
dict.get(key, default=None) key -- 字典中要查找的键。default -- 如果指定键的值不存在时,返回该默认值。
get()和setdefault()的区别:
一. get 函数 -- 获得给定键相关联的值
dict = {'name':'lorine','age':'25'}dict.get('name')
# 返回name对应的键值lorine,如果此键不存在字典中,则会返回Ndict.get('work','student')
# 如果对应的键'work'不在字典中,则会返回默认的'student'
二. setdefault 函数 -- 获得给定键相关联的值,并更新字典,还能在字典中不含有给定键的情况下设置相应的键值
dict = {'name':'lorine','age':'25'}dict.setdefault('name')
# 或者dict.setdefault('name','lili')都是返回name对应的值dict.setdefault('work')
# 此键值不存在,则更新字典添加此键和默认值dict ={'name':'lorine','age':'25','work':None};dict.setdefault('work','student')
# 则更新字典dict ={'name':'lorine','age':'25','work':'student'};
用get函数优化代码:
D = {&192.168&: 2}ip = &192.168&# if ip in D:#
D[ip] += 1# else:#
d[ip] = 1# print Dres = {}res[ip] = D.get(ip, 0) + 1print res
遍历list的三种方法:
num = [1, 2, 3, 4, 5, 6]for i in num:
print ifor i in range(len(num)):
print num[i]for i,j in enumerate(num):
# print i, j
遍历dict的两种方法:
info = {&name&: &yangbin&, &age&: 22, &sex&: &male&}for i in info.keys():
print i, info[i]for k,v in info.items():
三元运算: 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:
if 12 & 20:
print &True&else:
print &False&result = &True& if 12 & 20 else &False&print result运行结果: FalseFalse
lambda表达式: 对于简单的函数,也存在一种简便的表示方式,即:lambda表达式.
# 普通函数表示:def f(num):
return num + 1# print f(20)result = f(20)print result# lambda表达式表示: 定义函数my_lambda = lambda args: args + 1 执行函数result = my_lambda(20)print result
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
邮箱低至5折
推荐购买再奖现金,最高25%
&200元/3月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
函数, lambda表达式相关信息,包括
的信息,所有函数, lambda表达式相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International&GITHUBVIMEO&
posts - 70, comments - 18, trackbacks - 0, articles - 0
lambda表达式可以理解为一种抽象的函数实现方法,这种方式只有最基本的三个步骤:给与参数,表达式实现,返回结果。这种方式非常干净,减少了内存的使用,整个程序少了函数的污染,代码格式也会更为简练。但在python中的使用是受限的,只能进行简单的表达式计算。
下面简单给一个知乎扒的代码示范一下:
func = (lambda x:x**i for i in xrange(4))
for i in func:
上面代码的含义很简单,for i in xrange(4)会返回一个列表[0,1,2,3],而func对象实际上是一个迭代器iterator,对其遍历之后就会返回这样一个结果:
(lambda x:x**0)
(lambda x:x**1)
(lambda x:x**2)
(lambda x:x**3)
然后在进行lambda表达式的计算。
也就是说:
i(0) = (lambda x:x**0)
i(1) = (lambda x:x**1)
i(2) = (lambda x:x**2)
i(3) = (lambda x:x**3)
最后自然就会返回1,4,16,64这样一个结果。
&再举一个map,filter函数与lambda函数结合使用的例子:
&&& l = ['foo', 'bar', 'far']
&&& map(lambda x: x, l)
['foo', 'bar', 'far']
&&& filter(lambda x: 'f' in x, l)
['foo', 'far']
&&& map(lambda x: x.upper(), filter(lambda x: 'f' in x, l))
['FOO', 'FAR']
map(a,b)会在a,b之间建立一个映射关系,将a实际上是b中一个元素,lambda函数会以a为参数进行表达式运算,之后再返回结果。
同理filter也是如此,只不过filter只会返回lambda函数返回值为真的元素。}

我要回帖

更多关于 python lambda函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信