On Thu, 4 Feb 2010 13:36:25 +0100, Alessandro Dentella <san...@e-den.it> wrote: > On Thu, Feb 04, 2010 at 01:15:37PM +0100, Daniele Varrazzo wrote: >> On Thu, 4 Feb 2010 10:26:40 +0100, Alessandro Dentella <san...@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 >> ...
> 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 Mi sembra di capire che nel mondo ideale di Guido i bool sarebbero tipi separati dagli int mentre nel fangoso mondo reale ne sono una sottoclasse. Ma anche se fossero tipi interi separati, saprebbero effettuare operazioni aritmetiche miste: questo vuol dire che comunque saresti in grado di fare operazioni tipo int + bool. Ma sarebbe curioso se si potessero usare operatori misti aritmetici ma non logici, non trovi? Io penso sarebbe una limitazione artificiale. Avresti: implementazioni di int == int, di bool == bool ma non potresti usare int == bool. Proprio per la proprietà di "trasparenza", per cui puoi facilmente scrivere codice in cui usare indifferentemente int o bool come input booleani, questa sarebbe una pericolosa asimmetria che porterebbe ad eccezioni misteriose. È proprio necessario che false sia 0? Probabilmente no (per le shell, 0 è true in contesto logico), ma in ogni caso, se puoi implementare operazioni logiche miste, tipo bool == int, false *deve* essere uguale ad almeno un intero: se False == X fosse sempre falso, vorrebbe dire che X è vero per ogni intero X, quindi praticamente non puoi usare gli interi come valori logici. Potevano scegliere -42 come False, ma cominceresti ad avere inconsistenze tra come si comportano il not logico e il not binario (operatore ~). Se vuoi verificare che un oggetto X sia davvero False e non 0, usa "if X is False" ;) -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python