Python物件真值判定邏輯粗解與簡明例子
阿新 • • 發佈:2018-11-10
Python的真值判定
python3.7
Shawn
文件:
https://docs.python.org/3.7/library/stdtypes.html#truth-value-testing
- python中有很多時候可以直接將物件用在if和while中.
- 但是在功能上,這些位置是需要通過Boolean來進行判斷的.
- 這就牽扯到Python對於True和False的設計概念.
- 在預設狀態下,python會認定你的物件恆為真直到物件的__bool__()方法返回false或者物件的__len__()返回0.
- 包括但不限於以下狀況:
- None與False
- 任何數學形式的0:0,0.0,0j,Decimal(0),Fraction(0,1)
- 空佇列/集合:’’,(),[],{},set(),range(0)
- 以下案例說明了:
- 1.無__len__()與__bool__()狀態下,python將物件恆判斷為真.
- 2,3.在有__len__()或__bool__()狀態下,python根據其返回結果來判斷真偽.
- 4.1,4.2:在__len__()與__bool__()同時存在時,python只會承認__bool__()的結果,無視__len__()的結果.
# 1.在無__len__()與__bool__()狀態下: class test: def __init__(self,n): self.lis = [] for i in range(n): self.lis.append(i) def print(self): try: print(self.lis.pop()) except: print("empty list") =================== RESTART: F:\PyWorkspace\booleanTest.py =================== >>> t = test(9) >>> while t: t.print() 8 7 6 5 4 3 2 1 0 empty list empty list empty list empty list ... # 2.在定義了__len__()的狀態下: class test: def __init__(self,n): self.lis = [] for i in range(n): self.lis.append(i) def print(self): try: print(self.lis.pop()) except: print("empty list") def __len__(self): return len(self.lis) =================== RESTART: F:\PyWorkspace\booleanTest.py =================== >>> t = test(10) >>> while t: t.print() 9 8 7 6 5 4 3 2 1 0 >>> # 3.在定義了__bool__()的狀態下: class test: def __init__(self,n): self.flag = False self.lis = [] for i in range(n): self.lis.append(i) self.flag = True def print(self): try: print(self.lis.pop()) except: print("empty list") self.flag = False def __bool__(self): return self.flag =================== RESTART: F:\PyWorkspace\booleanTest.py =================== >>> t = test(5) >>> while t: t.print() 4 3 2 1 0 empty list >>> # 4.1在同時定義了__len__()與__bool__()的狀態下: class test: def __init__(self,n): self.flag = False self.lis = [] for i in range(n): self.lis.append(i) self.flag = True def print(self): try: print(self.lis.pop()) except: print("empty list") self.flag = False def __bool__(self): return self.flag def __len__(self): return len(self.lis) =================== RESTART: F:\PyWorkspace\booleanTest.py =================== >>> t = test(4) >>> while t: t.print() 3 2 1 0 empty list >>> # 4.2在同時定義了__len__()與__bool__()的狀態下: class test: def __init__(self,n): self.flag = False self.lis = [] for i in range(n): self.lis.append(i) self.flag = True def print(self): try: print(self.lis.pop()) except: print("empty list") self.flag = False def __bool__(self): return True def __len__(self): return len(self.lis) =================== RESTART: F:\PyWorkspace\booleanTest.py =================== >>> t = test(4) >>> while t: t.print() 3 2 1 0 empty list empty list empty list empty list empty list empty list empty list ...