匿名函数

匿名函数和闭包

旧街凉风 提交于 2019-12-01 06:10:07
真正的匿名函数 在PHP5.3引入的众多功能中, 除了匿名函数还有一个特性值得讲讲: 新引入的__invoke 魔幻方法。 这个魔幻方法被调用的时机是: 当一个对象当做函数调用的时候, 如果对象定义了__invoke魔幻方法则这个函数会被调用, 这和C++中的操作符重载有些类似, 例如可以像下面这样使用 ###魔术方法__invoke <?php class Callme { public function __invoke($phone_num) { echo "Hello: $num"; } } $call = new Callme(); $call(13810688888); // "Hello: 13810688888 ?> #匿名函数的实现 前面介绍了将对象作为函数调用的方法, 聪明的你可能想到在PHP实现匿名函数的方法了,PHP中的匿名函数就的确是通过这种方式实现的。 我们先来验证一下: <?php $func = function() { echo "Hello, anonymous function"; } echo gettype($func); // object echo get_class($func); // Closure ?> 原来匿名函数也只是一个普通的类而已. #闭包的使用 PHP使用闭包(Closure)来实现匿名函数,

PHP匿名函数及闭包

╄→尐↘猪︶ㄣ 提交于 2019-12-01 06:08:23
匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了, 目前使用比较广泛的Javascript以及C#,PHP直到5.3才开始真正支持匿名函数,C++的新标准C++0x也开始支持了。 匿名函数是一类不需要指定标示符,而又可以被调用的函数或子例程,匿名函数可以方便的作为参数传递给其他函数,最常见应用是作为回调函数。 闭包(Closure) 说 到匿名函数,就不得不提到闭包了,闭包是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数,这个被应用的自由变量将和这个函数一同存在,即使离开了创建它的环境也一样,所以闭包也可认为是有函数 和与其相关引用组合而成的实体。在一些语言中,在函数内定义另一个函数的时候,如果内部函数引用到外部函数的变量,则可能产生闭包。在运行外部函数时,一 个闭包就形成了。 这个词和匿名函数很容易被混用,其实这是两个不同的概念,这可能是因为很多语言实现匿名函数的时候允许形成闭包。 使用create_function()创建"匿名"函数 前面提到PHP5.3中才才开始正式支持匿名函数,说到这里可能会有细心读者有意见了,因为有个函数是可以生成匿名函数的: create_function函数,在手册里可以查到这个函数在PHP4.1和PHP5中就有了,这个函数通常也能作为匿名回调函数使用,例如如下: <?php

clojure 新手指南(6):全局绑定&匿名函数

佐手、 提交于 2019-12-01 06:00:51
绑定变量 在Clojure中,我们可以使用 " def " 给函数和数据赋予一个名字。例如我们定义一个叫做“alphabet”的字符串变量 user=> (def alphabet "abcdefghijklmnopqrstuvwxyz") #'user/alphabet user=> alphabet "abcdefghigklmnopqrstuvwxyz" 使用变量的好处一个是方便使用,另一个在于一个有意义的名字大大增强代码的可读性。举个例子,如果我们想要知道一个字符串的包含的字符数量: user=> (count alphabet) 26 我们就不需要在每次去计算字符串数量的时候都要写下长长的一大串了。只用把与该字符串绑定的变量名传过去就行。使用变量绑定,我们不仅能使代码具有良好的可读性,有时候还能增加代码性能。 增加性能?这个很好理解也很常用。例如我们经常把计算好的值绑定到一个变量上。这样我们在用到这个值的时候就不用每次都得重新计算了。对于一些费时的操作,这可能省下大量的时间。下面的例子就说明了这一点: user=> (def alphabet-length (count alphabet)) user=> alphabet-length 26 如果我们要计算字符串长度的两倍,就可以直接使用绑定的字符串长度: user=> (+ alphabet-length

python 匿名函数lambda()

不想你离开。 提交于 2019-12-01 05:37:41
什么是lambda()函数 当我们想要使用一个简单定义的,或者只需要调用一两次的函数时,取名就是一个比较麻烦的事 使用 lambda() 匿名函数可以省去这一步骤 #x是传入的参数a = lambda x : x*10 print(a(1))#10 上述代码说明,lambda定义了一个匿名函数,将x作为传入参数,x*10作为函数体,用函数可以定义为: def fun(x): return x*10 print(fun(1))#10 lambda()可以与filter(),map()等函数一起使用: #将range(10)以内的偶数过滤掉 a = list(filter(lambda x : x % 2,range(10)))#奇数余2的值为1,bool值为True,filter函数返回此元素 print(a)#[1, 3, 5, 7, 9] #将range(10)以内的数*2保存到新列表 b = list(map(lambda x:x*2,range(10))) print(b)#[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] lambda()只能使代码简洁,不能提高效率 可能令维护变得困难,因此不要用lambda来定义复杂的函数。 来源: https://www.cnblogs.com/chenchang-rjgc/p/11660557.html

python--匿名函数lambda

不羁岁月 提交于 2019-12-01 05:04:59
,匿名函数的定义 在Python语言中除了def语句用来定义函数之外,还可以使用匿名函数lambda,它是Python一种生成函数对象的表达式形式。匿名函数通常是创建了可以被调用的函数,它返回了函数,而并没有将这个函数命名,普通函数需要去依靠函数名去调用而匿名函数没有,所以需要把这个函数对象复制给某个变量进行调用 lambda有时被叫做匿名函数也就是这个原因,需要一个函数,又不想动脑筋去想名字,这就是匿名函数。 function=lambda n:n**100print(function(9))一个参数p=lambda a,b:a+bprint(p("The","\tworld!"))二个参数------------------------------------------- 265613988875874769338781322035779626829233452653394495974574961739092490901302182994384699044001 The world! 来源: https://www.cnblogs.com/fqqwz/p/11657286.html

lambda 匿名函数

五迷三道 提交于 2019-11-30 22:23:20
lamdba的基础用法是: lambda arguments : expression 示例: add = lambda x,y:x+y print(add(1,2)) # 3 在lambda x, y : x + y中,x和y是函数的参数,x+y是表达式,它被执行并返回结果。 lambda x, y : x + y返回的是一个函数对象,它可以被赋值给任何变量。 可与python数据处理函数map()、reduce()、filter() 搭配使用 map() 会根据提供的函数对指定序列做映射 示例: # 取绝对值 data = [-1, 2, -3, 4, -5] new_data = map(lambda x:abs(x), data) print(list(new_data)) # 求和 data = [-1, 2, -3, 4, -5] data1 = [1, -2, 3, -4, 5] new_data = map(lambda x,y:x+y, data,data1) print(list(new_data)) reduce()函数会对参数序列中元素进行累积 示例: from functools import reduce data = [1,2,3,4] print(reduce(lambda x,y: x+y, data)) # 计算过程 # 1 + 2 = 3 #

详解立即执行函数(function(){}()),(function(){})()

大城市里の小女人 提交于 2019-11-30 14:43:27
  要知道这几种写法之间的区别,我们要先聊些题外话——js中函数的两种命名方式,即表达式和声明式。   函数的声明式写法为: function foo(){/*...*/} ,这种写法会导致函数提升,所有function关键字都会被解释器优先编译,不管是声明在什么位置,都可以调用它,但是它本身不会被执行,定义只是让解释器知道其存在,只有在被调用的时候才会执行。 图1 声明式函数   函数的表达式写法为: var foo=function(){/*...*/} ,这种写法不会导致函数提升,于是就必须 先声明,再调用 ,否则会出错,如图2。 图2 表达式函数   现在,回到正题,(function(){}()),(function(){})()这两种是js中立即执行函数的写法,函数表达式后加上()可以被直接调用,但是把整个声明式函数用()包起来的话,则会被编译器认为是函数表达式,从而可以用()来直接调用,如 (function foo(){/*...*/})() ,但是如果这个括号加在声明式函数后面,如 function foo(){/*...*/}() ,则会 报错 ,很多博客说这种写法()会被省略,但实际是会出错,因为不符合js的语法,所以想要通过浏览器的语法检查,就必须加点符号,比如()、+、!等,具体可以查看图3。 图3 立即执行函数 总结一下就是: function foo(

五.内置函数和匿名函数

梦想与她 提交于 2019-11-30 13:51:48
楔子 在讲新知识之前,我们先来复习复习函数的基础知识。 问:函数怎么调用? 函数名() 如果你们这么说。。。那你们就对了!好了记住这个事儿别给忘记了,咱们继续谈下一话题。。。 来你们在自己的环境里打印一下自己的名字。 你们是怎么打的呀? 是不是print('xxx'),好了,现在你们结合我刚刚说的函数的调用方法,你有没有什么发现? 我们就猜,print有没有可能是一个函数? 但是没有人实现它啊。。。它怎么就能用了呢? 早在我们“初识函数”的时候是不是就是用len()引出的? 那现在我们也知道len()也是一个函数,也没人实现,它好像就自己能用了。。。 之前老师给你讲你可以这样用你就用了,那你有没有想过像这样直接拿来就能用的函数到底有多少? 返回顶部 内置函数 接下来,我们就一起来看看python里的内置函数。截止到python版本3.6.2,现在python一共为我们提供了 68个内置函数 。它们就是python提供给你直接可以拿来使用的所有函数。这些函数有些我们已经用过了,有些我们还没用到过,还有一些是被封印了,必须等我们学了新知识才能解开封印的。那今天我们就一起来认识一下python的内置函数。这么多函数,我们该从何学起呢? Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next

十四天:匿名函数

馋奶兔 提交于 2019-11-30 12:37:24
目录 匿名函数 max/min 返回最大值/最小值 fileter 筛选 map 映射 内置函数 或许能用到的 不一定用的到的 异常处理的部分用法 匿名函数 匿名就是没有名字,所以他就没办法调用,只能和某些方法联用 匿名函数语法 :lambda 参数:返回值 但是你如果真的想调用匿名函数,也可以赋值,但是他就变成了有名函数 f = lambda x,y : x**y res = f(1,2) print(res) 匿名函数基本上都是和内置方法联用 max/min 返回最大值/最小值 salary_dict = { 'nick': 3000, 'jason': 100000, 'tank': 5000, 'sean': 2000, 'z': 1000 } def func(name): # nick/jason/tank/sean/z return salary_dict[name] # 3000/100000/5000/2000/1000 res = max(salary_dict, key=func) # 默认key的首字母 res = max(salary_dict, key=lambda name: salary_dict[name]) # 默认key的首字母 print(res) # key=func默认做的事情 # 1. 循环遍历salary_dict

匿名函数,内置函数

纵饮孤独 提交于 2019-11-30 12:31:00
目录 匿名函数 有名函数 匿名函数 与内置函数联用 max()方法 sorted() map() filter() 内置函数 掌握 了解 匿名函数 有名函数 def func(): print('from func') func() 这是一个有名函数,func就是它的名字 匿名函数 lambda x,y: x+y 匿名函数没有名字,也不能调用函数,一般与内置方法联用 lambda 参数: 返回值 与内置函数联用 max()方法 salary_dict = { 'nick': 3000, 'jason': 100000, 'tank': 5000, 'sean': 2000 } 如果想取上述薪资最多的名字,可以 print(max(salary_dict)) # 打印结果:tank 这里是按照字典的key比较大小,但我们要的是value比较大小,返回key def func(name): return salary_dict[name] print(max(salary_dict, key=func)) # 打印结果:jason 用匿名函数 print(max(salary_dict, key=lambda name: salary_dict[name])) sorted() 对薪资进行排序, 可以用sorted方法 sorted()工作原理: 首先将可迭代对象变成迭代器对象 res