Python中內(nèi)置了一個有意思的函數(shù):lambda,允許我們快速定義單行的最小的函數(shù),先來看一個簡單的例子:
清單1
- >>>def f(x):
- ... return 2**x
- ...
- >>>f(3)
- 8
- >>>
我們可以用lambda函數(shù)實現(xiàn):
清單2
- >>> a = lambda x:2**x
- >>> a(3)
- 8
- >>>
當(dāng)然也可以寫成更簡單方式:
清單3
- >>>(lambda x:2**x)(3)
- 8
- >>>
我們注意lambda函數(shù)與其他函數(shù)語法定義不同的地方:
1、參數(shù)列表周圍沒有括號
2、沒有 return 關(guān)鍵字(它是隱含存在的,因為整個函數(shù)只有一行)
3、該函數(shù)沒有函數(shù)名稱,但是可以將它賦給一個變量來使用,此時變量中是lambda函數(shù)的引用
lambda 是一種風(fēng)格問題。不一定非要使用它。假如你在你的項目中大量使用 lambda 函數(shù),你會發(fā)現(xiàn)你的程序變得非常難于維護.(參考:<dive into python>)
我們再來看一個例子來深入學(xué)習(xí):
清單4
- >>>a, b = 2, 4 #a=2, b=4
- >>>(lambda x:x*x)(a and b)
- 16
- >>>(lambda x:x*x)(a or b)
- 4
- >>>
如果你學(xué)習(xí)過其他編程語言,比如 C 或者 pascal ,一定對形如 bool? a:b
這樣的表達式很熟悉,當(dāng)然python中也有類似的表達式,但是我們現(xiàn)在討論的是將類似的表達式放到 lambda
函數(shù)中去,所以這時我們要用到奇妙的 and 和 or 運算.
來看一個 and 運算的例子:
清單5
- >>>'a' and 'b'
- 'b'
- >>> '' and 'b'
- ''
- >>> 'a' and 'b' and 'c'
- 'c'
1、使用 and 時,表達式從左到右進行運算,按照慣例,0,'',(),{},[],None 在布爾運算時為假;除此之外的任何東西都為真.
2、如果表達式中的某個值為假,and 運算返回第一個假值
3、所有值都為真,and 運算返回最后一個真值
在上面的例子中,'' 是第一個假值
來看一個 or 運算的例子:
清單6
- >>>'a' or 'b'
- 'a'
- >>>'' or 'b'
- 'b'
- >>>'' or [] or {}
- {}
- >>>def func():
- ... print "in func()"
- ... return 1
- >>>'a' or func()
- 'a'
1、or 的運算順序和 and 相同,都是從左到右
2、它返回第一個真值,而且是立即返回,這意味著它將放棄后面的比較。(如果人生也能如此簡單就好了)
3、如果所有的值都為假,它返回最后一個假值
現(xiàn)在我們回過頭來再去看清單4中的例子,是不是覺得簡單多了?
呵呵,是的,python 還有很多神奇之處,我會在學(xué)習(xí)的過程中不斷的和大家分享。
本文來自 python吧
,歡迎轉(zhuǎn)載,但請保留我站鏈接,謝謝。
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答??! 點擊進入論壇