Depuis l'introduction de la bool
il s'agit d'une sous-classe de int
et les bools peuvent être convertis en entiers de manière implicite :
>>> issubclass(bool, int)
True
>>> ['one', 'two'][False]
'one'
>>> ['one', 'two'][True]
'two'
>>> True/20
0.05
C'était pour des raisons historiques : la compatibilité avec les API antérieures à la version 2.3 ; et je crois savoir qu'elle a été conservée de la version 2.3 à la version 2.7. (Ce problème a été résolu dans la version 2.7. cette question à partir de 2011)
Cependant, pourquoi est-ce toujours vrai dans Python 3 ? Je n'y vois aucun avantage. Et il n'y a aucune raison de le conserver pour la rétrocompatibilité : Python 3.0 était une version de rupture ; et je ne pense pas que les API antérieures à la version 2.3 existent encore de toute façon.