python 中的三元表達式及lambda

#####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 是爲了減小單行函數的定義而存在的。
相關文章
相關標籤/搜索