En un mot: parce que c'est ce que la spec dit. C'est un utile état d'esprit pour entrer dans de toute façon. ;-)
Maintenant, pourquoi ne le spec dire? Il y a seulement un nombre fini de types de fonction peut accepter comme valide la saisie. L' int
fonction tente de couvrir deux types de cas d'utilisation:
- convertir une chaîne de caractères de la représentation d'un entier en
int
- un cast
float
valeur int
, tronquant*
Le troisième cas d'utilisation, "conversion de la représentation de chaîne d'un nombre à virgule flottante à une int
" n'est pas couvert par la spec, parce que la langue de créateurs ont décidé de ne pas le couvrir. Ce qui semble être une décision raisonnable à faire, car ils avaient besoin de tracer la ligne quelque part sur ce que les types de la fonction et de ne pas accepter. La représentation sous forme de chaîne d'un nombre à virgule flottante doit être analysé par l' float
, pas int
.
* En fait: tout objet qui a un __int__
méthode, mais permet de garder les choses simples.
Comme un contre-exemple, en PHP, vous pouvez essayez de lancer une chaîne à un int
, et il va essayer de vous donner le meilleur match:
php > echo (int)'3.14';
3
php > echo (float)'3.14';
3.14
php > echo (int)'3 little pigs';
3
php > echo (int)'there are 3 little pigs';
0
Qui, honnêtement, est plutôt fou comportement, surtout que la dernière. Python a une stricte(re) type de système; si vous essayez d'analyser une chaîne de caractères comme un int
, il doit être parfaitement valide la représentation d'un nombre entier, pas simplement quelque chose qui contient quelque part quelque chose qui peut être interprétée comme un nombre.