冰与火之歌:Python的三元表达式
生活随笔
收集整理的這篇文章主要介紹了
冰与火之歌:Python的三元表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我不知道為什么,Python這么優雅的語言居然不支持三元運算符,也就意味著無法像C語言一樣直接使用conditon?a:b來返回a或b。我感覺我對Python的喜愛受到了挑戰。我不喜歡這種感覺。經過上網搜索和自行實驗,我終于找到了三元表達式的替代方法。
方法一:a if condition else b 如果condition為True,返回a;否則,返回b。 例如,下面的例子根據條件輸出'冰'或者'火' >>> '冰' if 3 > 2 else '火''冰'>>> '冰' if 3 < 2 else '火''火'>>>
方法二:利用and or短路運算的特點 and運算時,例如a and b,如果a為False就不再判斷b的值。or運算時,例如a or b,如果a為True就不再判斷b的值。 假設表達式為:condition and a or b。如果condition為True,會接著判斷a,如果a等同True,就返回a的值。如果a等同False,就計算b,返回b的值。如果你覺得有點繞,直接看下面的例子。 eg.下面的例子根據條件輸出不同的字符: >>> 3 > 2 and '冰' or '火''冰'>>> 3 < 2 and '血' or '沙''沙'
但這種方法有個坑,如果a為"",即空串,對它作真假值判斷時會返回False,與我們的假設不符。 例如,下面我們希望3>2時輸出一個空串,然而卻事與愿違。 >>> 3 > 2 and '' or '火''火'>>> 我們想要一個空串,然而卻造成火災。
這種方法看起來挺優雅,看在它優雅的份上,能不能補救一下呢? 當然,機制的網友找到了修補的方法,那就是把a和b用列表包起來。因為即使包含空串元素的列表,其表達式依然等同True。 eg.上面的例子包裹后變成下面這幅德行: >>> (3 > 2 and [''] or ['火'])[0]'' 可以看到,這種方法是多么地丑陋。構造了兩個列表不說,最后還得依賴下標運算把想要的值取出來。
所以推薦使用第一種方法。比較好理解,也沒有坑。
最后,請原諒我做了一回標題黨。畢竟生活本無趣,我只想加入點色彩。
方法一:a if condition else b 如果condition為True,返回a;否則,返回b。 例如,下面的例子根據條件輸出'冰'或者'火' >>> '冰' if 3 > 2 else '火''冰'>>> '冰' if 3 < 2 else '火''火'>>>
方法二:利用and or短路運算的特點 and運算時,例如a and b,如果a為False就不再判斷b的值。or運算時,例如a or b,如果a為True就不再判斷b的值。 假設表達式為:condition and a or b。如果condition為True,會接著判斷a,如果a等同True,就返回a的值。如果a等同False,就計算b,返回b的值。如果你覺得有點繞,直接看下面的例子。 eg.下面的例子根據條件輸出不同的字符: >>> 3 > 2 and '冰' or '火''冰'>>> 3 < 2 and '血' or '沙''沙'
但這種方法有個坑,如果a為"",即空串,對它作真假值判斷時會返回False,與我們的假設不符。 例如,下面我們希望3>2時輸出一個空串,然而卻事與愿違。 >>> 3 > 2 and '' or '火''火'>>> 我們想要一個空串,然而卻造成火災。
這種方法看起來挺優雅,看在它優雅的份上,能不能補救一下呢? 當然,機制的網友找到了修補的方法,那就是把a和b用列表包起來。因為即使包含空串元素的列表,其表達式依然等同True。 eg.上面的例子包裹后變成下面這幅德行: >>> (3 > 2 and [''] or ['火'])[0]'' 可以看到,這種方法是多么地丑陋。構造了兩個列表不說,最后還得依賴下標運算把想要的值取出來。
所以推薦使用第一種方法。比較好理解,也沒有坑。
最后,請原諒我做了一回標題黨。畢竟生活本無趣,我只想加入點色彩。
總結
以上是生活随笔為你收集整理的冰与火之歌:Python的三元表达式的全部內容,希望文章能夠幫你解決所遇到的問題。