更多課程 選擇中心

Python培訓
美國上市教育機構

400-111-8989

Python培訓

關于Python中bool類型,你需要知道這些細節…

  • 發布:Python培訓
  • 來源:熱門文章
  • 時間:2020-03-27 17:26

布爾類型很簡單,僅包括True和False兩種類型,但你不一定真的了解……

1. 首次引進2002年3月,龜叔首次在PEP285中首次明確在python中引進布爾類型,并包括兩個實例:"True"和"False"

2. 繼承于int布爾類型是int型的一個子類,意味著"True"=1,"False"=0:

1print(True == 1) # 輸出True2print(False == 0) # 輸出True

當然,也支持對布爾值和int值進行簡單的計算:

1True + 2 # 輸出323 * False # 輸出0

3. 布爾取值其他編程語言中,可能布爾值會寫作"true"和"false",但在python中必須首字母大寫:

1a = true2# NameError: name 'true' is not defined

4. 何為真假在python中,數值0(各種類型下的數值0)、空字符串、空列表等以及特殊的None值在判斷真假時,將被判斷為False:

1bool(0) # 整型0 False2bool(0.0) # 浮點數0 False3bool(None) # None值 False4bool('') # 空字符串 False5bool([]) # 空列表 False6bool([None]) # 含有None的列表 True

5. 全局實例由于布爾類型僅有兩個取值,所以所有True或者False具有相同的實例地址:

1a = True2b = 1 == 13print(id(True)) #1407345307548964print(id(a)) #1407345307548965print(id(b)) #140734530754896

6. 邏輯運算與很多編程語言也不同,python中的布爾邏輯運算符是and、or和not,而不是&、||、~(分別代表了二級制位運算中的邏輯與、或、非):

1bool(3 and 4) # True2bool(3 & 4) # False 因為3&4的位運算結果為0

三種邏輯運算優先級為not>and>or:

10 or 1 and not 22# False

7. 短路特性短路特性意味著在and或or中,一個值可以判斷出結果時,不再對后一個值進行判斷,且返回值為可以得出結果的那個值:

13 and 4 #輸出420 and 4 #輸出033 or 4 #輸出340 or 4 #輸出4

利用這一特點,在有些程序設計中非常有用。例如判斷一個列表中最后一個元素是否大于0時,由于不確定列表是否為空,所以直接按下標取值可能引發錯誤,比較穩妥的判斷方式為:

1lyst = []2#可能引發錯誤的寫法3if lyst[-1]>0: # IndexError: list index out of range4 print('ok')5# 穩妥的寫法6if lyst and lyst[-1]>0:7 print('ok')

8. 龜叔關于布爾值的一些答復在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))

免責聲明:整理文章為傳播相關技術,版權歸原作者所有,如有侵權,請聯系刪除

預約申請免費試聽課

填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

上一篇:python實現在函數中修改變量值的方法
下一篇:IT行業平均薪資突破14萬穩居第一,前景大好!

零基礎學習Python應該這樣學!

IT行業平均薪資突破14萬穩居第一,前景大好!

python實現在函數中修改變量值的方法

選擇城市和中心
黑龍江省

吉林省

河北省

湖南省

貴州省

云南省

廣西省

海南省

4438全国大成网人网站