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

Alessandro Dentella sandro a e-den.it
Gio 4 Feb 2010 13:36:25 CET


On Thu, Feb 04, 2010 at 01:15:37PM +0100, Daniele Varrazzo wrote:
> On Thu, 4 Feb 2010 10:26:40 +0100, Alessandro Dentella <sandro a e-den.it>
> wrote:
> 
> > 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?
> 
> A me piace... e mi piace ancora di più che 1 == True! In questo modo un
> modo rapido per sapere quanti True hai in un insieme è sommare i valori
> logici tra loro. O fare giochini tipo:
> 
> In [1]: def leggi_lati_triangolo():
>    ...:     return map(int, raw_input().split())
>    ...: 
> 
> In [2]: a, b, c = leggi_lati_triangolo()
> 3 4 4
> 
> In [3]: {0: 'scaleno', 1: 'isoscele', 3: 'equilatero'}[(a == b) + (b == c)
> + (a == c)]
> Out[3]: 'isoscele'
> 
> In calcolo numerico si usa spesso moltiplicare una matrice numerica per
> una matrice di booleani: la semplice moltiplicazione restituisce una
> matrice che contiene solo i valori numerici corrispondenti ai "vero" dei
> booleani. Perché dovrebbe essere più facile fare queste operazioni in C che
> in Python? ;)
 
Questo è avvincente come sostegno all'idea che il booleano si comporti comex
un intero. Ne deriva necessariamente che 0 == False? Ovvero: il fatto che
*si comporti come un numero* nell operazioni richiede per necessità che ==
dica che sono uguali?

Credo che la prima  parte delle parole di guido indichino di no:

      In an ideal world, bool might be better implemented as a separate
      integer type that knows how to perform mixed-mode arithmetic

sandro
*:-)


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


Maggiori informazioni sulla lista Python