Se sei perplesso perché bool
è un argomento indice valido: questo è semplicemente per coerenza con il fatto che bool
è una sottoclasse di int
e in Python è è un tipo numerico.
Se ti stai chiedendo perché bool
è un tipo numerico, in primo luogo poi si deve capire che bool
non era presente in vecchie versioni di Python e chi è abituato int
s invece.
Aggiungerò un po 'di argomenti storici. Prima di tutto l'aggiunta di bool
in python è brevemente descritta nel blogpost di Guido van Rossum (aka BDFL): The History of Python: The history of bool
, True
and False
. Il tipo è stato aggiunto tramite PEP 285.
Il PEP contiene lo effettivo razionale utilizzato per queste decisioni. Citerò alcune delle parti del PEP di seguito.
4) Dovremmo cerchiamo di eliminare le operazioni non booleane su Caccio in futuro, attraverso opportuni avvertimenti, in modo che, per esempio True+1
sarebbe poi (in Python 3000) essere illegale?
=> No.
C'è una piccola ma rumorosa minoranza che preferirebbe vedere Caccio "libro di testo" che non supportano le operazioni aritmetiche a tutti, ma la maggior parte recensori d'accordo con me che Caccio dovrebbe sempre consentire operazioni aritmetiche.
6) Dovrebbe bool
ereditare da int
?
=> Sì.
In un mondo ideale, bool
potrebbe essere meglio implementato come un tipo intero separata che sa come eseguire in modalità mista aritmetica. Tuttavia, ereditando bool
dal int
facilita l'attuazione enormemente (in parte dal tutto il codice C che chiama PyInt_Check()
continuerà a lavorare - questo restituisce true per sottoclassi di int
). Inoltre, ritengo questo è giusto in termini di sostituibilità: codice che richiede un int
può essere alimentato un bool
e si comporterà lo stesso 0
o 1
. Il codice che richiede un bool
potrebbe non funzionare quando viene assegnato un int
; ad esempio, 3 è 0, ma entrambi 3 e 4 sono veri se considerati valori di verità .
Perché bool
eredita da int
, True+1
è valido e uguale 2
, e così via. Questo è importante per la compatibilità all'indietro: poiché i confronti e così via attualmente restituiscono valori interi, non c'è il modo di dire cosa usano le applicazioni esistenti di questi valori .
A causa della compatibilità, il tipo bool manca molte proprietà che alcuni vorrebbero vedere. Ad esempio, sono consentite operazioni aritmetiche con uno o due argomenti bool, trattando False come 0 e True come 1. Inoltre, un valore bool può essere utilizzato come indice di sequenza .
Non vedo questo come un problema, e non voglio evolvere il linguaggio in questa direzione. Non credo che un'interpretazione più restrittiva di "Booleanness" da parte di renda più chiara la lingua .
Sommario:
- Compatibilità: c'era un sacco di codice già utilizzato
int
s 0
e 1
per rappresentare False
e True
e alcuni di essi utilizzato tali valori numerici calcoli.
- Non è stato visto come un grosso problema di avere un "non-libro di testo"
bool
tipo
- Un sacco di persone della comunità Python voluto queste caratteristiche
- BDFL detto.
[Ecco un mucchio di esempi] (http://www.petercollingridge.co.uk/python-tricks/boolean -indices). –
Utile per il golf del codice: print (('ko', 'ok') [a polku
È un codice Python valido, se l'uso "legittimo" è quindi principalmente una questione di opinione. – skyking