匿名函数

PHP闭包(Closure)初探

坚强是说给别人听的谎言 提交于 2019-11-30 00:58:48
不知不觉发现PHP已经出到了5.5版本,而自己一直在用PHP5.2,让我看起来像深山出来的小伙子一样,又土又落后。在我习惯在javascript中使用闭包之后,忽然间对PHP的闭包打起了兴趣。 于是乎在网上下了个WAMP集成开发环境,是PHP5.3版本的(PHP5.3开始引入了闭包的特性),不得不说WAMP安装使用真的很方便。简单配置了一下,开始动手。 匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个匿名函数是这样: $func = function() { }; //带结束符 可以看到,匿名函数因为没有名字,如果要使用它,需要将其返回给一个变量。匿名函数也像普通函数一样可以声明参数,调用方法也相同: $func = function( $param ) { echo $param; }; $func( 'some string' ); //输出: //some string 顺便提一下,PHP在引入闭包之前,也有一个可以创建匿名函数的函数:create function,但是代码逻辑只能写成字符串,这样看起来很晦涩并且不好维护,所以很少有人用。 实现闭包 将匿名函数在普通函数中当做参数传入,也可以被返回。这就实现了一个简单的闭包。 下边有三个例子 //例一 //在函数里定义一个匿名函数,并且调用它 function

php匿名函数的概念

青春壹個敷衍的年華 提交于 2019-11-30 00:58:34
#一.匿名函数和闭包的概念 ###1.1匿名函数 匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了, 目前使用比较广泛的Javascript以及C#, PHP直到5.3才开始真正支持匿名函数 。 什么是匿名函数 匿名函数是一类 不需要指定标示符 ,而又可以被调用的函数或子例程,匿名函数可以方便的作为参数传递给其他函数, 最常见应用是作为回调函数 ###1.2. 闭包(Closure) 说到匿名函数,就不得不提到闭包了,闭包是词法闭包(Lexical Closure)的简称, 是引用了自由变量的函数 , 这个被应用的自由变量将和这个函数一同存在,即使离开了创建它的环境也一样,所以闭包也可认为是有函数和与其相关引用组合而成的实体。 注解,这个自由变量你在外部创建的的,外部可能是函数或其他。 在一些语言中,在函数内定义另一个函数的时候,如果内部函数引用到外部函数的变量,则可能产生闭包。在运行外部函数时, 一个闭包就形成了。 这个词和匿名函数很容易被混用,其实这是两个不同的概念,这可能是因为很多语言实现匿名函数的时候允许形成闭包。 来源: oschina 链接: https://my.oschina.net/u/2980350/blog/810883

Python中的匿名函数lambda

孤街醉人 提交于 2019-11-29 21:51:08
一、什么是匿名函数 关键字lambda表示匿名函数。 冒号前面的x表示形参,冒号后面是返回值。 例:计算1~10对应数字的平方,以列表形式输出。 定义法函数: def fun(x): return x**2 print(list(map(fun,range(1,11)))) 匿名函数法: print(list(map(lambda x:x**2,range(1,11)))) 二、匿名函数的特点 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。 用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数。 三、实例 返回1~50内所有偶数 代码 : 结果 : 来源: https://blog.csdn.net/CapejasmineY/article/details/100934703

day4

此生再无相见时 提交于 2019-11-29 21:05:47
阅读目录 函数名的本质 闭包 装饰器 迭代器和生成器 迭代器 生成器函数 生成器表达式 匿名函数 递归函数 内置函数 回到顶部 函数名的本质 函数名本质上就是函数的内存地址 1.可以被引用 def func(): print('in func') f = func print(f) View Code 2.可以被当作容器类型的元素 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') l = [f1,f2,f3] d = {'f1':f1,'f2':f2,'f3':f3} #调用 l[0]() d['f2']() 函数被当作容易类型的元素 3.可以当作函数的参数和返回值 第一类对象(first-class object)指 1.可在运行期创建 2.可用作函数参数或返回值 3.可存入变量的实体。 第一类对象 *不明白?那就记住一句话,就当普通变量用 回到顶部 闭包函数 def func(): name = 'eva' def inner(): print(name) 闭包函数定义: 内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数 #函数内部定义的函数称为内部函数 由于有了作用域的关系,我们就不能拿到函数内部的变量和函数了。如果我们就是想拿怎么办呢?返回呀!

10.Lambda表达式入门

浪尽此生 提交于 2019-11-29 16:44:19
使用Lambda表达式代替匿名内部类创建对象时,Lambda表达式的代码块会代替实现抽象方法的方法体,Lambda表达式就相当于一个匿名方法,由三部分组成: -形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号都可以省略。 -箭头:"->",必须通过英文中横线符号和大于符号组成 -代码块:如果代码只包含一条语句,Lambda表达式允许省略代码块的花括号,那么这条语句就不要用花括号表示语句结束。Lambda代码块只有一条return语句,甚至可以忽略return关键字。Lambda表达式需要返回值,而它的代码块中如果仅有一条省略了return的语句,Lambda表达式会自动返回这条语句的值。 下面程序示范了Lambda表达式的几种简化写法: 1 interface Eatable { 2 void taste(); 3 } 4 5 interface Flyable { 6 void fly(String weather); 7 } 8 9 interface Addable { 10 int add(int a, int b); 11 } 12 13 public class LambdaQs { 14 //调用该方法需要Eatable对象 15 public void eat(Eatable e) { 16 System.out.println

python 函数

随声附和 提交于 2019-11-29 13:58:46
函数 简介 ​ 函数是组织好的,可重复使用的,用来实现,单一或相关联的功能 ​ 函数能提高模块的利用行,和代码的重复利用率以及冗余,其实你已经使用了很多的Python函数,比如print()。 ​ 但是你也可以自己创建函数,这种叫做自定义函数 函数规则 函数代码块必须以def 关键字开头,后面为函数标识符名以及() 任何传入的参数和自定变量必须放在圆括号中间。圆括号之间可以用来定义参数 函数的第一行语句可以选择性的使用注释字符来表明函数的作用及说明 函数的内容以冒号起始,并且必须缩进 return [表达式] 结束函数,选择性的返回一个值给调用该函数方。不带表达式的函数默认会返回 None 语法 #语法 def functionname( parameters ): "函数_文档字符串" function_suite return [expression] #实例 def printme( str ): "打印传入的字符串到标准显示设备上" print(str) return 默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。 函数调用 定义一个函数只能给函数一个名称,指定函数里包含的参数,和代码块结构 函数基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从python提示符执行 #!/usr/bin/python # -*- coding: UTF-8 -

匿名函数的用法

醉酒当歌 提交于 2019-11-29 10:27:01
#匿名函数的特点#1,匿名函数也是函数,调用时需要加上括号#2,匿名函数只能有一行代码#3,匿名函数的返回值不用return关键字# lambda 参数1,参数2:返回的表达式# 匿名函数作为参数给其他函数使用,简化代码# 变量new_func是函数new_func = lambda x, y:x + yresult = new_func(1, 2)print(result)匿名函数作为参数给其他函数使用,主要配合高阶函数使用# 定义无参数的匿名函数,输入‘hello world’# func = lambda: print('hello world')# func()def sum_num(num1, num2): return num1 + num2 def show(func): print('sum_num函数还未执行!') a = 1 b = 2 result = func(a, b) print(result) print('sum_num函数执行了') View Code show(sum_num) #传入函数# 使用匿名函数对代码进行简化show(lambda x, y: x + y) #里面的匿名函数就作为show函数的参数 来源: https://www.cnblogs.com/wjun0/p/11515378.html

Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

懵懂的女人 提交于 2019-11-29 10:19:34
一、作用域 return 可以返回任意值 例子 def test1(): print("test1") def test(): print("test") return test1 res = test() print(res)    输出结果 test <function test1 at 0x021F5C90>    分析:这里print(res)输出的是test1函数在内存中的地址,return也是可以返回的 ,加上括号就可以运行函数了 例子2 name = "pony" def test1(): name = "nicholas" def inner(): name = "jack" print(name) return inner res = test1() print(res) res()    输出结果 <function test1.<locals>.inner at 0x02195C48> jack    分析: test1函数返回了inner函数的内存地址,并被赋值给res,所以最后在res后加上括号就可以直接执行,注意这里执行的是inner函数,打印name选择的是局部变量name ="jack",而非选择调用执行的res()所在的name = "pony" 例子3 def foo(): name = 'jack' def bar(): name =

Python之匿名函数如何理解?

非 Y 不嫁゛ 提交于 2019-11-28 19:50:26
常规我们定义函数时,函数都是有名字的,比如: def add(x,y): return x+y   这个函数是有名字的,叫add,我们在使用的时候直接调用即可: print(add(3,2)) 那么匿名函数呢,经常看一些代码会出现类似lambda(x,y:x+y),那么我们该如何去理解匿名函数呢? 我们先看定义: 匿名函数: 根据名字就可以知道,被定义的函数是没有名字的;lambda是一个表达式而不是一个语句。它能够出现在Python语法不允许def出现的地方。作为表达式,lambda返回一个值(即一个新的函数),lambda用来编写简单的函数,而def用来处理更强大的任务。 格式:lambda 参数 冒号 表达式 比如:lambda x: x+1 传入参数+1的函数 如果我们要通过函数实现求和,来看一个简单的例子: def odd(x,y): return x+y print(odd(2,3)) #运行上面的代码,我们就可以得到2+3的和为:5 #如果这个函数我们只是用一次,不需要定义,那么用匿名函数如何实现: lambda x,y:x+y #调用这个匿名函数: print((lambda x,y:x+y)(2,3))   上面def是一个常规的处理方法,如果用lambda则是传入参数x,y,冒号后面跟表达式:x+y 匿名函数引用可以赋值给一个新的值比如:f=lambda x,y

python内置函数与匿名函数

拈花ヽ惹草 提交于 2019-11-28 15:45:06
一.匿名函数   匿名即没有名字。 #普通函数 def func(x,y,z=1): return x+y+z #匿名函数及没有名字,只有参数列表与return的值表达式,用:分隔 lambda x,y,z=1:x+y+z #与函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,除非让其有名字 func=lambda x,y,z=1:x+y+z func(1,2,3) #让其有名字就没有意义   匿名函数与有名函数的对比 #有名函数与匿名函数的对比 有名函数:循环使用,保存了名字,通过名字就可以重复引用函数功能 匿名函数:一次性使用,随时随时定义 应用:max,min,sorted,map,reduce,filter 二. 内置函数与匿名函数的使用   python中有很多的内置函数,比如常用的max、range、type、getattr、setattr、open等。更多内置函数: https://docs.python.org/3/library/functions.html?highlight=built#ascii 2.1 max、min   max与min的用法一样,用于获取一个可迭代对象中的最大值与最小值,可以key指定匿名函数自定义返回值用于max、min比较的依据。 # max,min使用方法一致 iterable = [1, 5, 3, 2, 7]