[Python] 0 in (False,) // 0 == False

Alessandro Dentella sandro a e-den.it
Gio 4 Feb 2010 10:26:40 CET


Ciao,

(solo) oggi mi sono imbattuto in "0 in (False,)" che ha un comportamento
francamente controintuitivo:

  In [1]: 0 in (False,)
  Out[1]: True

che a sua volta dipende dal fatto che:

  In [2]: 0 == False
  Out[2]: True

Sono quindi andato a rispulciarmi la language reference::

  The operators <, >, ==, >=, <=, and != compare the values of two
  objects. The objects need not have the same type. If both are numbers, they
  are converted to a common type. Otherwise, objects of different types always
  compare unequal, and are ordered consistently but arbitrarily. 

Objects of different type always compare unequal:

  In [3]: type(0)
  Out[3]: <type 'int'>

  In [4]: type(False)
  Out[4]: <type 'bool'>


0 e False *sono* tipi differenti ... ah no!

  In [6]: isinstance(False, int)
  Out[6]: True

  In [7]: bool.__mro__
  Out[7]: (<type 'bool'>, <type 'int'>, <type 'object'>)

Mi viene qui di da chiedermi: ma che bisogno c'è che un booleano erediti da
un intero? piace a tutti che "0 == False" sia vero?



sandro
*:-)


-- 
Sandro Dentella  *:-)
http://sqlkit.argolinux.org        SQLkit home page - PyGTK/python/sqlalchemy


Maggiori informazioni sulla lista Python