[Python] 0 in (False,) // 0 == False
Enrico Franchi
enrico.franchi a gmail.com
Gio 4 Feb 2010 16:42:41 CET
On Feb 4, 2010, at 1:36 PM, Alessandro Dentella wrote:
> 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?
Pensiamo ai comportamenti...
1. 0 e False sono inconfrontabili. Arriva un'eccezione, quindi. In questo caso
quindi abbiamo che effettivamente interi e booleani non sono intercambiabili.
Sarebbero due tipi completamente distinti. Non e' quello che fa Python.
2. 0==False -> True
3. 0==False -> False
Suppongo che sia chiaro che la 3 non porta da nessuna parte.
Avremmo degli assurdi completi, roba controintuitiva. Non sono nemmeno
difficili da inventare.
No, l'unica cosa e' intendere booleani e interi come tipi non confrontabili.
Che e' in controtendenza con Python, che impone ordinamento sui tipi.
> 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
Come non hai capito la mia obiezione, non hai capito il preambolo di Guido.
Io ti ho detto che 0 == False non e' *necessariamente* una questione di ereditarieta'.
In questo caso funziona perche' bool eredita da int.
*Ma* avrebbe potuto essere ottenuto anche altrimenti. In particolare, se int e bool
fossero semplicemente duck-typati, la cosa avrebbe dovuto funzionare *ugualmente*.
Come nota a margine... non mi sembra tu ti sia stracciato le vesti per 0 == 0L.
Il fatto che lo 0 booleano si chiami False non vedo perche' ti dia piu' fastidio.
Maggiori informazioni sulla lista
Python