Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/2
1.0
Est-ce prévu? Je me souviens très bien des versions précédentes renvoyant int/int=int
? Que dois-je faire, y a-t-il un nouvel opérateur de division ou dois-je toujours lancer?
Jetez un coup d'œil à PEP-238 : Changement d'opérateur de division
L'opérateur // sera disponible pour demander une division sans ambiguïté.
Oups, a immédiatement trouvé 2//2
.
J'espère que cela pourra aider quelqu'un instantanément.
Dans Python 2.7: Par défaut, l’opérateur de division renvoie un résultat en nombre entier.
obtenir le résultat en double multiple 1. à "dividende ou diviseur"
100/35 => 2 #(Expected is 2.857142857142857)
(100*1.0)/35 => 2.857142857142857
100/(35*1.0) => 2.857142857142857
Dans Python 3
// => used for integer output
/ => used for double output
100/35 => 2.857142857142857
100//35 => 2
100.//35 => 2.0 # floating-point result if divsor or dividend real
La réponse acceptée mentionne déjà PEP 238 . Je veux juste ajouter un regard rapide dans les coulisses pour ceux qui sont intéressés par ce qui se passe sans lire le PEP en entier.
Python mappe des opérateurs tels que +
, -
, *
et /
à des fonctions spéciales, telles que p. a + b
est équivalent à
a.__add__(b)
En ce qui concerne la division dans Python 2, il n'y a par défaut que /
qui mappe sur __div__
et le résultat dépend des types d'entrée (par exemple int
, float
).
Python 2.2 a introduit la fonction __future__
_ division
, qui a modifié la sémantique de la division de la manière suivante (TL; DR de PEP 238):
/
mappe sur __truediv__
qui doit "renvoyer une approximation raisonnable du résultat mathématique de la division" (citation du PEP 238)//
est mappé sur __floordiv__
, ce qui devrait renvoyer le résultat pondéré de /
Avec Python 3.0, les modifications de PEP 238 sont devenues le comportement par défaut et il n'y a plus de méthode spéciale __div__
dans le modèle d'objet de Python.
Si vous voulez utiliser le même code dans Python 2 et Python 3, utilisez
from __future__ import division
et s'en tenir à la sémantique PEP 238 de /
et //
.