lambda parameter:expression
其中lambda是声明一个匿名函数,parameter是这个函数有参数,可以有多少,中间用逗号隔开,expression是正则表达式
<code>def</code> <code>compute(a,b,func):</code>
<code> </code><code>result </code><code>=</code> <code>func(a,b)</code>
<code> </code><code>return</code> <code>result</code>
<code>num </code><code>=</code> <code>compute(</code><code>11</code><code>,</code><code>12</code><code>,</code><code>lambda</code> <code>x,y:x</code><code>+</code><code>y)</code>
<code>print</code><code>(num)</code>
方法compute有三个参数,从封装的代码中可以看到,compute把第三个参数用函数传入,再看代码的第四行,表达式是x+y,所以func参数的内容就是x+y,且需要传入两个参数分别为x,y,再看看第二行代码中传入两个参数是a,b,那么result = a + b,因为a = 11,b = 12,所以result等于23,所以num等于23,打印结果也就是23
下面做一下延伸:
<code>func_new </code><code>=</code> <code>input</code><code>(</code><code>"请输入一个匿名函数:"</code><code>)</code>
<code>num </code><code>=</code> <code>compute(</code><code>11</code><code>,</code><code>12</code><code>,func_new)</code>
上面的代码就是说让我们输入一个函数,这样的话,你想让它实现加法,它就加法。想让它实现减法就实现减法。
不过它只能在2.7版本才可以用上面的代码,3.6的话就不行,因为input会把你输入的值都变成客串,也就是"lambda x,y:x+y",你让一个字符串去实现这个,不是搞笑吗?这时候我们就可以用到eval函数,这个函数很强大。它可以去除这字符串,让它变成一个可以被调用的函数,如下代码
<code>func_new </code><code>=</code> <code>eval</code><code>(func_new)</code>
<code></code>
本文转自 周子琪 51CTO博客,原文链接:http://blog.51cto.com/izhouyu/1967315