[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