[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