[Python] 0 in (False,) // 0 == False

Pietro Battiston toobaz a email.it
Ven 5 Feb 2010 09:54:38 CET


Il giorno ven, 05/02/2010 alle 09.15 +0100, Raffaele Salmaso ha scritto:
> Marco Dalla Stella wrote:
> > (Per dovere di cronaca, a me piace 0==False).
> A me sinceramente no.
> Un booleano è un booleano.
> Un numero è un numero.
> Questa è l'unica cosa che preferisco di java (ahia...)
> Concordo che sia molto comodo, estremamente comodo, anche se preferirei
> *esplicitare* il fatto che voglio un booleano, invece di averlo
> implicito, e ovviamente forzare le condizioni ad accettare *solo* ed
> *esclusivamente* dei booleani. Ad es invece di
> if ret_code: ... # con ret_code non booleano
> preferirei (anche a costo di qualche carattere in più)
> if bool(ret_code): ...
> 

La mia impressione è che mandi a quel paese il duck typing in generale,
quando "basterebbe", per risolvere il problema originale, creare un tipo
Bool che si comporti esattamente come un int (e in particolare True che
si comporta esattamente come 1) ma non sia un int, e penso che la
rationale per la situazione attuale sia solo e soltanto la semplicità
d'implementazione - su cui non ho da discutere.

Certo, qualche cosa un po' controintuitiva potrebbe restare, nel senso
che avremmo (scusa Enrico per lo spoiler):

>>> 1 == True
False
>>> 1 + 1 == 1 + True
True

Ma questa cosa _non è affatto controintuitiva_ per chi non parta già
assumendo che i booleani siano numeri.

Ora, siccome l'affermazione "i booleani non sono necessariamente numeri"
è ancora più forte di "i booleani non sono necessariamente int" e può
far rizzare i capelli in capo a molti (i booleani sono nati come
un'algebra, non come due oggetti qualsiasi in un campo di patate),
faccio notare che l'algebra booleana non prevede affatto che True + True
faccia 2 (o se preferite, per rimanere più aderenti all'algebra booleana
dovremmo forse avere bool(2) = False) - o se volete che "+" sia
intepretato come il "vel" booleano e il "-" come "né", non prevede
affatto che True + True - True faccia True.

In conclusione: i booleani "comodi", con cui si può fare giochetti come
quello dei triangoli, _non_ sono l'algebra booleana standard, per cui è
difficile che la matematica ci doni qualche regola indiscutibile. Alla
fine penso sia veramente una questione di comodità. A questo punto, la
domanda è, a parità di duck typing, cosa abbia di comodo 0 == False, e
l'unica risposta che sono in grado di formulare è "facilità di
implementazione".

Pietro



Maggiori informazioni sulla lista Python