Si vous êtes perplexe pourquoi bool
est un index valide l'argument: c'est simplement pour la cohérence avec le fait qu' bool
est une sous-classe de int
et en Python c' est un type numérique.
Si vous vous demandez pourquoi bool
est un type numérique, en premier lieu, alors vous devez comprendre que bool
n'était pas présent dans les anciennes versions de Python et les gens utilisaient int
s à la place.
Je vais ajouter un peu d'arguments historiques. Tout d'abord l'ajout d' bool
en python est peu décrit dans Guido van Rossum (aka BDFL) article sur le blog: L'Histoire de Python: l'histoire de L' bool
, True
et False
. Le type a été ajoutée par PEP 285.
Le PEP contient les réelles justifications utilisées pour ces décisions. Je vais citer quelques-unes des parties de la PEP ci-dessous.
4) Doit-on s'efforcer d'éliminer les non-opérations Booléennes sur des booléens
dans l'avenir, à travers des avertissements adéquats, de sorte que, par exemple,
True+1
serait finalement (en Python 3000) être illégal?
=> Non.
Il y a un petit mais la minorité qui préférerait le voir
"manuel" bool qui ne prennent pas en charge les opérations arithmétiques à
tous, mais la plupart des commentateurs sont d'accord avec moi que booléens doivent toujours
permettre les opérations arithmétiques.
6) bool
hériter d' int
?
=> Oui.
Dans un monde idéal, bool
peut-être mieux mis en œuvre comme un
séparé de type integer qui sait comment effectuer en mode mixte
l'arithmétique. Cependant, héritant bool
de int
facilite l'
la mise en œuvre énormément(en partie car tous les code C qui appelle
PyInt_Check()
continuera de travailler -- renvoie true pour
les sous-classes d' int
). Aussi, je crois que c'est juste en termes de
substituabilité: le code qui implique un int
peuvent être nourris avec un bool
et il se comporte comme 0
ou 1
. Code qui nécessite une
bool
peut ne pas fonctionner lorsqu'il est donné un int
; par exemple, 3 & 4
est 0, mais la 3 et 4 sont vraies quand on la considère comme la vérité
des valeurs.
Parce qu' bool
hérite int
, True+1
est valide et correspond 2
, et
ainsi de suite. Ceci est important pour assurer la compatibilité ascendante: parce que
les comparaisons et donc sur le retour des valeurs entières, il n'y a pas
façon de dire quelles sont les utilisations des applications existantes de ces
des valeurs.
En raison de la compatibilité, le type bool manque beaucoup
les propriétés que certains aimeraient voir. Par exemple, l'arithmétique
les opérations avec un ou deux bool arguments est autorisé, le traitement de l'
Faux comme 0 et Vrai 1. Aussi, un booléen peut être utilisé comme une séquence
index.
Je ne vois pas cela comme un problème, et je ne veux pas faire évoluer le
langue dans cette direction aussi. Je ne crois pas qu'une
interprétation plus restrictive de "Booleanness" fait la langue toute
plus claire.
Résumé:
- Rétro-compatibilité: il y avait beaucoup de code déjà utilisé
int
s 0
et 1
pour représenter False
et True
et certains il a utilisé ces valeurs dans les calculs numériques.
- Il n'était pas vu comme une grande affaire pour avoir un "non-manuels"
bool
type
- Beaucoup de gens dans la communauté Python voulais que ces caractéristiques
- BDFL l'a dit.