python 中的三元表達式及lambda


一、三元表達式
舉一個簡單的列子,很多地方都有這樣的規定,比如用水或者用電,假設用水價格為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 是為了減少單行函數的定義而存在的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM