關(guān)于python中bool類型的重要細(xì)節(jié)
0. 導(dǎo)讀
1. 首次引進(jìn)

2. 繼承于int
1print(True?==?1)?#?輸出True
2print(False?==?0)?#?輸出True
1True?+?2?#?輸出3
23?*?False?#?輸出0
3. 布爾取值
1a?=?true
2#?NameError:?name?'true'?is?not?defined
4. 何為真假
1bool(0)?#?整型0?False
2bool(0.0)?#?浮點(diǎn)數(shù)0?False
3bool(None)?#?None值?False
4bool('')?#?空字符串?False
5bool([])?#?空列表?False
6bool([None])?#?含有None的列表?True
5. 全局實(shí)例
1a?=?True
2b?=?1?==?1
3print(id(True))?#140734530754896
4print(id(a))?#140734530754896
5print(id(b))?#140734530754896
6. 邏輯運(yùn)算
1bool(3?and?4)?#?True
2bool(3?&?4)?#?False 因?yàn)?&4的位運(yùn)算結(jié)果為0
10?or?1?and?not?2
2#?False
7. 短路特性
13?and?4?#輸出4
20?and?4?#輸出0
33?or?4?#輸出3
40?or?4?#輸出4
1lyst?=?[]
2#可能引發(fā)錯(cuò)誤的寫法
3if?lyst[-1]>0:?#?IndexError:?list?index?out?of?range
4????print('ok')
5#?穩(wěn)妥的寫法
6if?lyst?and?lyst[-1]>0:
7????print('ok')
8. 龜叔關(guān)于布爾值的一些答復(fù)
在PEP285文檔中,龜叔給出了社區(qū)關(guān)于布爾類型的一些議論及答復(fù)。簡(jiǎn)要列舉如下:
1. str(True)應(yīng)該返回"True"還是"1"?
? ??答:"True"。雖然True = 1,但str(True)=?"1",不如"True"來得直觀。
2. 新手傾向于寫“ if x == True”?
????答:實(shí)際上寫“ if x”就足夠了,會(huì)自動(dòng)轉(zhuǎn)化為布爾型進(jìn)行真值判斷。
3. 將來會(huì)取消布爾值的非布爾運(yùn)算?例如使True+1非法?
????答:不會(huì),布爾值應(yīng)始終允許算術(shù)運(yùn)算。
4. 用boolean替代bool的寫法?
????答:不會(huì)。python一直主張簡(jiǎn)潔,例如def、int和dict都是縮寫,雖然bool對(duì)于新手而言不如boolean更直觀,但它只是一個(gè)單詞而已。
5. 將來是否會(huì)要求布爾運(yùn)算有明確的布爾值作為參數(shù)?例如"if []"變得非法,而必須寫作"if bool([])"?
????答:不會(huì),至少龜叔不會(huì)同意。(再次說明python語法之簡(jiǎn)潔)
最后給出一個(gè)小彩蛋:
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等關(guān)鍵字及條件判斷語句(A?B:C)。
示例 1:
輸入: n = 3
輸出: 6
?
限制:1 <= n <= 10000
來源:力扣(LeetCode) 劍指offer 64#題
1def?sumNums(self,?n:?int)?->?int:
2????return?n?and?(n?+?sumNums(n-1))
_往期文章推薦_
