布爾類型很簡單,僅包括True和False兩種類型,但你不一定真的了解……
2002年3月,龜叔首次在PEP285中首次明確在python中引進布爾類型,並包括兩個實例:"True"和"False"1print(True == 1) # 輸出True
2print(False == 0) # 輸出True
1True + 2 # 輸出3
23 * False # 輸出0
1a = true
2# NameError: name 'true' is not defined
1bool(0) # 整型0 False
2bool(0.0) # 浮點數0 False
3bool(None) # None值 False
4bool('') # 空字符串 False
5bool([]) # 空列表 False
6bool([None]) # 含有None的列表 True
1a = True
2b = 1 == 1
3print(id(True)) #140734530754896
4print(id(a)) #140734530754896
5print(id(b)) #140734530754896
1bool(3 and 4) # True
2bool(3 & 4) # False 因為3&4的位運算結果為0
10 or 1 and not 2
2# False
13 and 4 #輸出4
20 and 4 #輸出0
33 or 4 #輸出3
40 or 4 #輸出4
1lyst = []
2#可能引發錯誤的寫法
3if lyst[-1]>0: # IndexError: list index out of range
4 print('ok')
5# 穩妥的寫法
6if lyst and lyst[-1]>0:
7 print('ok')
在PEP285文檔中,龜叔給出了社區關於布爾類型的一些議論及答覆。簡要列舉如下:
1. str(True)應該返回"True"還是"1"?
答:"True"。雖然True = 1,但str(True)= "1",不如"True"來得直觀。
2. 新手傾向於寫「 if x == True」?
答:實際上寫「 if x」就足夠了,會自動轉化為布爾型進行真值判斷。
3. 將來會取消布爾值的非布爾運算?例如使True+1非法?
答:不會,布爾值應始終允許算術運算。
4. 用boolean替代bool的寫法?
答:不會。python一直主張簡潔,例如def、int和dict都是縮寫,雖然bool對於新手而言不如boolean更直觀,但它只是一個單詞而已。
5. 將來是否會要求布爾運算有明確的布爾值作為參數?例如"if []"變得非法,而必須寫作"if bool([])"?
答:不會,至少龜叔不會同意。(再次說明python語法之簡潔)
最後給出一個小彩蛋:
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
示例 1:
輸入: n = 3
輸出: 6
限制:1 <= n <= 10000
來源:力扣(LeetCode) 劍指offer 64#題
簡單的求和問題,但由於不允許用乘除法、循環和條件判斷,所以原本簡單的問題變得有些棘手。如果了解python布爾值是int子類和邏輯運算符的短路特性,就可以理解如下實現方法:1def sumNums(self, n: int) -> int:
2 return n and (n + sumNums(n-1))