天天看點

python之匿名函數lambda

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