#####1、三元表達式 舉一個簡單的列子,不少地方都有這樣的規定,好比用水或者用電,假設用水價格爲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)
再來一個簡單的例子,兩個數,咱們返回其中較大的那個數。code
>>> def max_(a, b): ... if a > b: ... max = a ... else: ... max = b ... return max
當用三元表達式來來寫就能夠是:max = a if a > b else b
看起來就簡潔不少了,這纔是Python嗎!字符串
#####2、lambdait
>>> def add(x, y) ... sum = x+y ... return sum
用lambda表達式來寫就是:add = lambda x, y:x+y
而後直接調用add(1, 2)就能夠獲得結果 若是把三元式中的cost函數列子用lambda表達式來寫就是:再增長一個抄表服務費,參數sclass
>>> 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 是爲了減小單行函數的定義而存在的。