Python之三元表達式嵌套三元表達式解析
Python的三元表達式相信學過python的朋友都會。但是大部分學python的朋友不知道的是三元表達式還可以嵌套三元表達式。
請看代碼案例:
- cmp = lambda a, b: 0 if a == b else 1 if a > b else -1
- print(cmp(3,2))
- print(cmp(2,3))
- print(cmp(2,2))
- out:1
- -1
- 0
以上代碼的功能是對兩個數進行比較,若第一個數等于第二個數返回0;若第一個數大于第二個數返回1;若第一個數小于第二個數返回-1。
直接看是不是比較懵?我把它拆分一下,換一種寫法,會容易懂得多。
- def cmp2(a, b):
- if a == b:
- return 0
- else:
- if a > b:
- return 1
- else:
- return -1
- print(cmp2(3, 2))
- print(cmp2(2, 3))
- print(cmp2(2, 2))
- out:1
- -1
- 0
可以看到上述2個函數功能完全一致,第一種寫法簡潔的多!
再來熟悉一下這種寫法,為了便于理解我多加了對括號:
- 0 if a == b else (1 if a > b else -1)
這種語句是三元表達式嵌套三元表達式的結構,從左向右計算。
三元表達式首先找if,找到if判斷a ==b (判斷元素):
- 若該條件滿足則返回if左邊的0(結果元素1)作為整個表達式的運算結果。
- 若該判斷條件不滿足則返回判斷條件右邊的三元表達式(結果元素2)。
右邊仍然是三元表達式,繼續計算該三元表達式,找到if判斷a>b(判斷元素):
- 若該條件滿足則返回if左邊的1(結果元素1)作為整個表達式的運算結果。
- 若該判斷條件不滿足則返回判斷條件右邊的-1(結果元素2)作為整個表達式的運算結果。
python的三元表達式非常靈活,從上述案例中可以學習到三元表達式的結果元素可以是三元表達式,也就是說三元表達式可以嵌套三元表達式使用。
三元表達式嵌套三元表達式的結構并不難懂,熟練掌握以后會讓你的代碼更簡潔,用三元表達式嵌套三元表達式感覺比用if else if else瞬間高大上了很多,嘻嘻。