title大小 - python plot fig title



為什麼bool是int的一個子類? (2)

也可以使用help來檢查控制台中Bool的值:

幫助(真)

help(True)
Help on bool object:
class bool(int)
 |  bool(x) -> bool
 |  
 |  Returns True when the argument x is true, False otherwise.
 |  The builtins True and False are the only two instances of the class bool.
 |  The class bool is a subclass of the class int, and cannot be subclassed.
 |  
 |  Method resolution order:
 |      bool
 |      int
 |      object
 |  

幫助(假)

help(False)
Help on bool object:
class bool(int)
 |  bool(x) -> bool
 |  
 |  Returns True when the argument x is true, False otherwise.
 |  The builtins True and False are the only two instances of the class bool.
 |  The class bool is a subclass of the class int, and cannot be subclassed.
 |  
 |  Method resolution order:
 |      bool
 |      int
 |      object

當通過python-memcached在memcached中存儲bool時,我注意到它是作為整數返回的。 檢查庫的代碼告訴我,有一個地方將isinstance(val, int)以將該值標記為整數。

所以我在python shell中測試了它,注意到以下幾點:

>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True

但為什麼boolint一個子類呢?

這是有道理的,因為一個布爾值基本上是一個int,它可以取兩個值,但它比實際的整數(沒有算法,只有一個存儲空間)需要更少的操作/空間。


Answer #1

來自http://www.peterbe.com/plog/bool-is-int上的評論

這是完全合乎邏輯的,如果你是在將bool類型添加到python的時候(有時大約是2.2或2.3)。

在引入實際的bool類型之前,0和1是真值的官方表示,類似於C89。 為了避免不必要地破壞非理想但工作代碼,新的bool類型需要像0和1一樣工作。這不僅僅是真值,而是所有的整數操作。 沒有人會推薦在數字上下文中使用布爾結果,大多數人也不推薦測試相等性來確定真值,沒有人想要找出困難的方式,即現有代碼是多少。 因此決定將True和False偽裝成1和0。 這僅僅是語言進化的歷史人造物。

值得一提的是這個很好的解釋。





boolean