Python/ target=_blank class=infotextkey>Python的三元表達(dá)式相信學(xué)過python的朋友都會(huì)。但是大部分學(xué)python的朋友不知道的是三元表達(dá)式還可以嵌套三元表達(dá)式。
請(qǐng)看代碼案例:
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
以上代碼的功能是對(duì)兩個(gè)數(shù)進(jìn)行比較,若第一個(gè)數(shù)等于第二個(gè)數(shù)返回0;若第一個(gè)數(shù)大于第二個(gè)數(shù)返回1;若第一個(gè)數(shù)小于第二個(gè)數(shù)返回-1。
直接看是不是比較懵?我把它拆分一下,換一種寫法,會(huì)容易懂得多。
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個(gè)函數(shù)功能完全一致,第一種寫法簡(jiǎn)潔的多!
再來熟悉一下這種寫法,為了便于理解我多加了對(duì)括號(hào):
0 if a == b else (1 if a > b else -1)
這種語句是三元表達(dá)式嵌套三元表達(dá)式的結(jié)構(gòu),從左向右計(jì)算。
三元表達(dá)式首先找if,找到if判斷a ==b (判斷元素):
- 若該條件滿足則返回if左邊的0(結(jié)果元素1)作為整個(gè)表達(dá)式的運(yùn)算結(jié)果。
- 若該判斷條件不滿足則返回判斷條件右邊的三元表達(dá)式(結(jié)果元素2)。
右邊仍然是三元表達(dá)式,繼續(xù)計(jì)算該三元表達(dá)式,找到if判斷a>b(判斷元素):
- 若該條件滿足則返回if左邊的1(結(jié)果元素1)作為整個(gè)表達(dá)式的運(yùn)算結(jié)果。
- 若該判斷條件不滿足則返回判斷條件右邊的-1(結(jié)果元素2)作為整個(gè)表達(dá)式的運(yùn)算結(jié)果。
python的三元表達(dá)式非常靈活,從上述案例中可以學(xué)習(xí)到三元表達(dá)式的結(jié)果元素可以是三元表達(dá)式,也就是說三元表達(dá)式可以嵌套三元表達(dá)式使用。
三元表達(dá)式嵌套三元表達(dá)式的結(jié)構(gòu)并不難懂,熟練掌握以后會(huì)讓你的代碼更簡(jiǎn)潔,用三元表達(dá)式嵌套三元表達(dá)式感覺比用if else if else瞬間高大上了很多,嘻嘻。
歡迎學(xué)python的朋友關(guān)注我,我會(huì)經(jīng)常更新深入學(xué)python的知識(shí)點(diǎn)。