559 votes

Quelle est la différence entre '/' et '//' lorsqu'ils sont utilisés pour la division ?

Y a-t-il un avantage à utiliser l'un plutôt que l'autre ? Dans Python 2, les deux semblent retourner les mêmes résultats :

>>> 6/3
2
>>> 6//3
2

3 votes

Veuillez vous référer à Le problème de la division des nombres entiers pour la raison de l'introduction de la // pour effectuer une division entière.

757voto

Eli Courtwright Points 53071

Dans Python 3.x, 5 / 2 retournera 2.5 y 5 // 2 retournera 2 . La première est une division en virgule flottante et la seconde est une division en virgule flottante. division du plancher parfois aussi appelé division de nombres entiers .

Dans Python 2.2 ou dans les versions ultérieures de la ligne 2.x, il n'y a pas de différence pour les entiers, sauf si vous effectuez un from __future__ import division ce qui fait que Python 2.x adopte le comportement de 3.x.

Indépendamment de l'importation future, 5.0 // 2 retournera 2.0 puisque c'est le résultat de la division du plancher de l'opération.

Vous trouverez une description détaillée à l'adresse suivante PEP 238 : Changer l'opérateur de division .

0 votes

Édité : Vous pouvez "corriger" la division depuis Python 2.2 ! (Il suffit de lire le PEP lié)

2 votes

Également python -Qnew . d'autres options de division : -Qold (par défaut), -Qwarn , -Qwarnall

2 votes

Il convient de souligner que 5.0 / 2 renvoie à 2.5 dans toutes les versions, tout comme 5 / 2.0 - l'ancien comportement n'est différent que lorsque les deux opérandes sont int .

75voto

Yichun Points 146

Python 2.x Clarification :

Pour clarifier pour la ligne Python 2.x, / n'est ni une division de plancher ni une véritable division.

/ est une division du plancher lorsque les deux Les arguments sont int mais la division est vraie lorsque o bien des args sont float .

37voto

Kena Points 5046

// met en œuvre la "division du sol", quel que soit votre type. Donc 1.0/2.0 donnera 0.5 mais les deux 1/2 , 1//2 y 1.0//2.0 donnera 0 .

Voir PEP 238 : Changer l'opérateur de division pour les détails.

0 votes

C'est une bonne réponse. Le lien PEP est utile. Vous pouvez également envisager d'utiliser math.floor() o math.fmod() si vous n'êtes pas sûr de ce qui se passe avec les opérateurs unaires .

0 votes

/ y // sont des opérateurs binaires (deux opérandes, gauche et droite, numérateur et dénominateur).

23voto

u0b34a0f6ae Points 14874

Comme tout le monde a déjà répondu, // est la division du plancher.

Ce qui est important, c'est que // est sans ambiguïté une division de plancher, dans toutes les versions de Python à partir de la 2.2, y compris les versions 3.x de Python.

Le comportement de / peut changer en fonction de :

  • Actif __future__ Importer ou non (module-local)
  • Option de ligne de commande Python, soit -Q old o -Q new

13voto

>>> print 5.0 / 2
2.5

>>> print 5.0 // 2
2.0

3 votes

Je n'avais pas réalisé que la division par un plancher fonctionnait aussi avec des nombres non entiers. Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X