[Python] 0 in (False,) // 0 == False
Enrico Franchi
enrico.franchi a gmail.com
Sab 6 Feb 2010 23:03:48 CET
On Feb 5, 2010, at 8:24 PM, Alessandro Dentella wrote:
> in attesa che Enrico mantenga la
> promessa e mostri gli "assurdi completi" che quanto scritto sopra
> comporterebbe.
Essenzialmente ha spiegato tutto già Daniele. Gli assurdi saltano fuori
dalla posizione:
In an ideal world, bool might be better implemented as a
separate integer type that knows how to perform mixed-mode
arithmetic.
Ovvero noi *vogliamo* mixed mode arithmetic. Tolto questo assunto,
è ovviamente completamente possibile gestire in modo consistente
le operazioni fra interi e booleani lanciando eccezioni.
Il punto è che IMHO l'aritmetica che coinvolge i booleani è estremamente
comoda. Evidentemente anche secondo Guido.
Quindi partiamo dal volere che un booleano possa stare in ogni posto
dove possa stare un intero.
Consideriamo anche ragionevole che:
1) a + (-a) == a - a == 0
2) m - n < 0 <==> m < n
Ma soprattutto chiediamoci cosa *dovrebbe* fare
False + True o una cosa come
True * 5
è completamente chiaro che il tutto è relativamente arbitrario (in particolare
True == 5 invece che True == 1 non darebbe problemi).
Ma prendere False != da 0 ci porrebbe nell'imbarazzante condizione di avere
if 0: print "foo"
che stampa "foo".
Comunque davvero, la cosa più naturale è vedere True e False come numeri a 1-bit.
Non ci formalizziamo perchè 0 == 0L, ma ci da fastidio False.
Se vogliamo fare aritmetica mista (che è l'assunto), ci troviamo a dovere dare convenzionalmente
un valore a True e False. E ovviamente tutte le scelte possibili sarebbero peggiori e meno
intuitive di questa.
Maggiori informazioni sulla lista
Python