一、三元表達式
舉一個簡單的列子,很多地方都有這樣的規定,比如用水或者用電,假設用水價格為3R/立方米,當你每個月用超過7立方米后,超出的水按照3.3R/立方米計價。然后寫一個程序計算一個家庭每月的水費。
>>> def cost(x):
... if x < 7 :
... pay = x*3
... elif x > 7:
... pay = 21 + (x-7)*3.3
... return pay
這個程序段非常簡單,邏輯就不用說了,條件不同計價方式就不一樣,但是當我們用三元表達式去寫同樣功能的這段函數是這樣的 pay = x*3 if x < 7 else (21+(x-7)*3.3)
再來一個簡單的例子,兩個數,我們返回其中較大的那個數。
>>> def max_(a, b):
... if a > b:
... max = a
... else:
... max = b
... return max
當用三元表達式來來寫就可以是:max = a if a > b else b
看起來就簡潔很多了,這才是Python嗎!
二、lambda
>>> def add(x, y)
... sum = x+y
... return sum
用lambda表達式來寫就是:add = lambda x, y:x+y
然后直接調用add(1, 2)就可以得到結果
如果把三元式中的cost函數列子用lambda表達式來寫就是:再增加一個抄表服務費,參數s
>>> cost = lambda x, s: (x*3 if x < 7 else (21+(x-7)*3.3)) + s
>>> cost(6, 4)
22
可以看到lambda的使用讓我們大量的簡化了代碼,看起來更美觀簡潔,當然是犧牲了一些可讀性,讓不熟悉Python的人看得不是很明白
下面介紹一個列子來了解為什么要用lambda
processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
在Visual Basic,你很有可能要創建一個函數,接受一個字符串參數和一個 collapse 參數,並使用 if 語句確定是否壓縮空白,然后再返回相應的值。這種方式比較低效,因為函數可能需要處理每一種可能的情況。每次你調用它,給出你結果前,都要判斷是否要壓縮空白。在 Python 中,你可以將決策邏輯拿到函數外面,而定義一個裁減過的 lambda 函數提供確切的 (唯一的) 你想要的。這種方式更為高效、更為優雅,而且很少引起那討厭的bug。`
lambda 定義了一個匿名函數
lambda 並不會帶來程序運行效率的提高,只會使代碼更簡潔。
如果可以使用for...in...if來完成的,堅決不用lambda。
如果使用lambda,lambda內不要包含循環,盡量定義函數來完成,使代碼獲得可重用性和更好的可讀性。
總結:lambda 是為了減少單行函數的定義而存在的。