匿名函数

匿名函数

拈花ヽ惹草 提交于 2019-12-09 20:40:58
# def my_sum(x,y):# return x+y# lambda x,y:x+y# print((lambda x,y:x+y)(1,2)) # 3# salaries={# 'siry':3000,# 'tom':7000,# 'lili':10000,# 'jack':2000# }# zip()# # print(max(salaries)) # tom# s='hello'# l=[1,2,3,4]# g=zip(s,l)# # print(g) # <zip object at 0x000001EBE6AE01C8># # print(list(g)) # [('h', 1), ('e', 2), ('l', 3), ('l', 4)]# g=zip(salaries.values(),salaries.keys())# print(list(g)) # [(3000, 'siry'), (7000, 'tom'), (10000, 'lili'), (2000, 'jack')]# def func(k):# return salaries[k]# max(salaries,key=func)# print(max(salaries,key=func)) # lili# print(max(salaries,key=lambda k:salaries[k])

Javascript的匿名函数

喜你入骨 提交于 2019-12-09 20:33:11
一、什么是匿名函数? 在Javascript定义一个函数一般有如下三种方式: 函数关键字(function)语句 : function fnMethodName(x){alert(x);} 函数字面量(Function Literals) : var fnMethodName = function(x){alert(x);} Function()构造函数 : var fnMethodName = new Function('x','alert(x);') 上面三种方法定义了同一个方法函数fnMethodName,第1种就是最常用的方法,后两种都是把一个函数复制给变量fnMethodName,而这个函数是没有名字的,即匿名函数。实际上, 相当多的语言都有匿名函数 。 二、函数字面量和Function()构造函数的区别 虽然函数字面量是一个匿名函数,但语法允许为其指定任意一个函数名,当写递归函数时可以调用它自己,使用Function()构造函数则不行。 var f = function fact(x) { if (x < = 1) return 1; else return x*fact(x-1); }; Function()构造函数允许运行时Javascript代码动态的创建和编译。在这个方式上它类似全局函数eval()。 Function()构造函数每次执行时都解析函数主体

在NewLisp中实现匿名函数的递归

蓝咒 提交于 2019-12-09 15:35:25
匿名函数在很多语言中的表现形式大概如下: (lambda (n) (* (+ n 1) (- n 1))) 只有参数列表和函数体,而没有名字。在大部分情况下没问题,但是一旦需要用到递归的话,就有点麻烦了,因为不知道如何去递归的调用一个匿名函数。 在学术界中有一些解决这个问题的办法,其中一个就是Y组合子,但是那个太繁琐,而且难以通过宏自动将一个lambda变成可递归形式,没什么好处。 根据历史经验,目前比较好的办法,就是实现一个操作符,匿名函数通过这个操作符来调用自身: (lambda (n) ... (this (- n 1))) 或者是 (lambda (n) ... (lambda (- n 1))) 第一种是用this或其他东西来表示当前匿名函数本身,直接调用就可以递归。第二种是和有名函数一样,用和定义匿名函数一样的操作符来调用自身。 然而第二种不实际,因为这样会造成混乱,比如需要嵌套lambda时,而且其语义也不对。 所以此文主要围绕第一种方式:实现让this指向当前匿名函数,从而可以递归调用自身。 NewLisp是一个Lisp语言的实现,也可以说是一个方言,其与Common Lisp相比,少了很多东西,但远比Common Lisp容易使用。Lisp系列的语言有一个特点:没有语法。或者说极小语法,用Lisp编写程序,直接没有了语法阶段,从语义开始起步,所以非常接近编译器

C#语法--委托,架构的血液

别来无恙 提交于 2019-12-09 13:43:08
委托的定义 什么是委托? 委托实际上是一种类型,是一种引用类型。 微软用delegate关键字来声明委托,delegate与int,string,double等关键字一样。都是声明用的。 下面先看下声明代码,这里声明了两个委托。 1 2 public delegate void TestDelegate(string message); public delegate int TestDelegate(MyType m, long num); delegate既然是关键字,和int,string一样,那么,为什么delegate后又跟了一个void或者int呢? 如果他们是同等地位的关键字,为什么可以一起使用呢? 很简单,我们把delegate后面的 【void TestDelegate(string message)】理解为一个变量,是不是就清晰明了了一些。 我们把delegate关键字理解为,是用来专门来定义这种复杂的变量的。而这种复杂的变量可以包含一个返回值和任意数目任意类型的传入参数。 有没有感觉,这个复杂的变量特别像一个函数的定义。 没错,官方定义,委托类型的声明与方法签名相似。所以,这个复杂变量,的确,书写的方式就是与函数一样。 那么,为什么这个声明方式如此怪异呢,是因为,我们用delegate定义的变量,只能用函数赋值。赋值方式如下所示: 1 2 3 4 5 6 7

Python匿名函数详解

随声附和 提交于 2019-12-09 12:49:57
文章导读: 转载自: https://blog.csdn.net/csdnstudent/article/details/40112803 以前自己一直没搞明白Python中的匿名函数,现在拿这个问题基本上搞明白了,拿自己的理解整成一篇文章,附带大量例子,让其更加好理解。 在编程语言中,函数的应用: 1. 代码块重复,这时候必须考虑用到函数,降低程序的冗余度 2. 代码块复杂,这时候可以考虑用到函数,降低程序的可读性 在Python,有两种函数,一种是def定义,一种是lambda函数 #假如要求两个数之和,用普通函数或匿名函数如下: 1. def func(x,y):return x+y 2. lambda x,y: x+y 在编程语言中,C/C++/Java属于过程式编程,而匿名函数(lambda)一般应用于函数式编程中,举个简单例子也许比较好理解,对于一个列表,要求大于3的元素. 过程式编程实现: 也就是常规的方法 >>> L1 = [1,2,3,4,5] >>> L2 = [] >>> for i in L1: if i>3: L2.append(i) >>> L2 [4, 5] 函数式编程实现: 运用filter,给其一个判断条件即可 >>> def func(x): return x>3 #在函数中 >>> filter(func,[1,2,3,4,5]) [4, 5]

scala 匿名函数

邮差的信 提交于 2019-12-07 18:41:34
1.匿名函数初探 Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体,参数的类型是可省略的,Scala 的类型推测系统会推测出参数的类型。使用匿名函数后,我们的代码变得更简洁了。 val numIncOne = (x:Int) => x + 1 上面的表达式就定义了一个接受一个Int类型输入参数的匿名函数,使用起来也很简单 numIncOne ( 2 ) 2输入为空的匿名函数 val printFun = () => println( "It's print function!" ) 调用: printFun () 上面的匿名函数没有接受任何参数,就是打印了一行字符串而已。 需要注意的是,匿名函数的返回值的数据类型依赖于函数体的最后一行表达式的值,这个由程序自己判断,匿名函数的返回值类型不能手工指定! 3.匿名函数的使用场景 1.函数变量(常量) 像我们前面举的例子里,都把匿名函数保存为了一个常量。 2.在将一个匿名函数作为参数进行传递。这个在我们平时编码过程中使用极多,因为scala是函数式编程语言,函数是头等公民,函数经常需要作为参数传递。如果给每个函数,尤其是那种一次性使用的函数起个合适的名字,那简直要头疼死了。在这种情况下,匿名函数就是最佳选择。来看几个特别简单的例子: val rawList = List (1 ,2 ,3 ,4 ,5 ,6 )

Scala学习笔记3 (Functional Programming)

别等时光非礼了梦想. 提交于 2019-12-07 18:39:04
3. FP 3.1. 函数 函数的地位和一般的变量是同等的,可以作为函数的参数,可以作为返回值。 传入函数的任何输入是只读的,比如一个字符串,不会被改变,只会返回一个新的字符串。 Java 里面的一个问题就是很多只用到一次的 private 方法,没有和使用它的方法紧密结合; Scala 可以在函数里面定义函数,很好地解决了这个问题。 3.1.1. 函数定义 函数和方法一般用 def 定义;也可以用 val 定义 匿名函数 ,或者定义 函数别名 。 def m0(x:Int) = x*x val m1 = (x:Int)=> x*x // 用 (), () 是必须的 val m2 = {x:Int=> x*x} // 用 {}, {} 是必须的 m0(10) // 100 m1(10) // 100 m2(10) // 100 不需要返回值的函数,可以使用 def f() {...} ,永远返回 Unit (即使使用了 return ) , 即: def f() {...} 等价于 def f():Unit = {...} 例如: def f() { return "hello world" } f() // Unit ,而不是 "hello world" 需要返回值的函数,用 def f() = {...} 或者 def f = {...} def f() = { "hello

Scala 函数 - 匿名函数

十年热恋 提交于 2019-12-07 18:38:34
Scala提供了一个相对轻量级的语法来定义匿名函数。源代码中的匿名函数称为函数文字,在运行时,函数文字被实例化为称为函数值的对象。 Scala支持一级函数,函数可以用函数文字语法表达,即 (x:Int)=> x + 1 ,该函数可以由一个叫作函数值的对象来表示。 尝试以下表达式,它为整数创建一个后继函数 - var inc = (x:Int) => x+1 变量 inc 现在是一种可以像函数那样使用的函数 - var x = inc(7)-1 还可以如下定义具有多个参数的函数: var mul = (x: Int, y: Int) => x*y 变量 mul 现在是可以像函数那样使用的函数 - println(mul(3, 4)) 也可以定义不带参数的函数,如下所示: var userDir = () => { System.getProperty("user.dir") } 变量 userDir 现在是可以像函数那样使用的函数 - println( userDir ) 来源: CSDN 作者: Simple_Zz 链接: https://blog.csdn.net/love284969214/article/details/82710348

JS中的匿名函数和闭包

泄露秘密 提交于 2019-12-07 15:54:50
定义函数的方式有两种,一是 函数声明 ,二是通过 函数表达式 。 函数声明的方式如下所示: function functionName(arg0,arg1,arg2){ //函数体 } 函数表达式: var functionName=function(arg0,arg1,arg2){ } 匿名函数 又称拉姆达函数,其定义是由函数表达式模式创建的函数,即创建一个函数并将它复制给变量。其特点是function关键字后面没有标识符。匿名函数的name属性是空字符串。 闭包 是指有权访问另一个函数作用域的变量的函数。创建闭包常见的方式就是在一个函数内部创建另一个函数。 下面的函数定义即为一个闭包: function createFunction(){ var result=new Array(); for(var i=0;i<10;i++){ result[i]=function(){ return i; }; } return result; } 由于闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存。过度使用闭包可能会导致内存占用过多。 闭包与变量 由于作用域链的存在,闭包只能取得包含函数中任何变量的最后一个值。 如下代码所示为解决实际问题中的闭包与变量的问题: for(var i=0;i 来源: CSDN 作者: yihuoZhou 链接: https://blog

js中的匿名函数和闭包总结篇

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-07 15:52:23
匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数。 一.匿名函数 //普通函数 function box () { //函数名是box return 'Lee' ; } //匿名函数 function () { //匿名函数,会报错 return 'Lee' ; } //通过表达式自我执行 ( function () { //封装成表达式 alert( 'Lee' ); })(); ( function (age) { //封装成表达式 alert(age); })( 100 ); //()表示执行函数,并且传参 //第一圆括号放匿名函数,第二个圆括号执行; //把匿名函数赋值给变量 var box = function () { //将匿名函数赋给变量 return 'Lee' ; }; alert(box()); //调用方式和函数调用相似 //注意上面的括号 //函数里的匿名函数 function box () { return function () { //函数里的匿名函数,产生闭包 return 'Lee' ; } } alert(box()()); //调用匿名函数 二.闭包 闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的常见的方式,就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量。 //通过闭包可以 返回局部变量