lambda的用途: 1. 使用Python寫一些執(zhí)行腳本時,使用lambda可以省去定義函數(shù)的過程,讓代碼更加精簡。 2. 對于一些抽象的,不會別的地方再復用的函數(shù),有時候給函數(shù)起個名字也是個難題,使用lambda不需要考慮命名的問題。 3. 使用lambda在某些時候讓代碼更容易理解。 lambda語句中,冒號前是參數(shù),可以有多個,用逗號隔開,冒號右邊的返回值。lambda語句構建的其實是一個函數(shù)對象,見證一下: g = lambda x : x**2 print g <function <lambda> at 0x00AFAAF0> Python中,有幾個定義好的全局函數(shù)方便使用的,他們就是filter, map, reduce。 >>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27] >>> >>> print filter(lambda x: x % 3 == 0, foo) [18, 9, 24, 12, 27] >>> >>> print map(lambda x: x * 2 + 10, foo) [14, 46, 28, 54, 44, 58, 26, 34, 64] >>> >>> print reduce(lambda x, y: x + y, foo) 139 map一句可以寫為: print [x * 2 + 10 for x in foo] 非常的簡潔,易懂。filter的例子可以寫成: print [x for x in foo if x % 3 == 0] 使用lambda的時候,需要注意作用域的問題。如想創(chuàng)建一個函數(shù)數(shù)組fs=[f0,...,f9] where fi(n)=i+n, 若寫成: fs = [(lambda n: i + n) for i in range(10)] 但是,奇怪的是, >>> fs[3](4) //n=4時,數(shù)組元素fs[3]的值,注意不是fs(4)[3] 13 >>> fs[4](4) 13 >>> fs[5](4) 13 沒有達到預期的原因是lambda中的i使用的是匿名函數(shù)外的全局變量。修改一下: fs = [(lambda n, i=i : i + n) for i in range(10)] >>> fs[3](4) //n=4時,數(shù)組元素fs[3]的值,注意不是fs(4)[3] 7 >>> fs[4](4) 8 >>> fs[5](4) 9 |
|