Python 2 a deux opérateurs de division: /
et //
. La sortie suivante:
========================================= RESTART: Shell =========================================
>>> for x in range(10):
for y in range(1, 10):
print x,'//',y,'=',x//y
print x,'/',y,'=',x/y
print
0 // 1 = 0
0 / 1 = 0
0 // 2 = 0
0 / 2 = 0
0 // 3 = 0
0 / 3 = 0
0 // 4 = 0
0 / 4 = 0
0 // 5 = 0
0 / 5 = 0
0 // 6 = 0
0 / 6 = 0
0 // 7 = 0
0 / 7 = 0
0 // 8 = 0
0 / 8 = 0
0 // 9 = 0
0 / 9 = 0
1 // 1 = 1
1 / 1 = 1
1 // 2 = 0
1 / 2 = 0
1 // 3 = 0
1 / 3 = 0
1 // 4 = 0
1 / 4 = 0
1 // 5 = 0
1 / 5 = 0
1 // 6 = 0
1 / 6 = 0
1 // 7 = 0
1 / 7 = 0
1 // 8 = 0
1 / 8 = 0
1 // 9 = 0
1 / 9 = 0
2 // 1 = 2
2 / 1 = 2
2 // 2 = 1
2 / 2 = 1
2 // 3 = 0
2 / 3 = 0
2 // 4 = 0
2 / 4 = 0
2 // 5 = 0
2 / 5 = 0
2 // 6 = 0
2 / 6 = 0
2 // 7 = 0
2 / 7 = 0
2 // 8 = 0
2 / 8 = 0
2 // 9 = 0
2 / 9 = 0
3 // 1 = 3
3 / 1 = 3
3 // 2 = 1
3 / 2 = 1
3 // 3 = 1
3 / 3 = 1
3 // 4 = 0
3 / 4 = 0
3 // 5 = 0
3 / 5 = 0
3 // 6 = 0
3 / 6 = 0
3 // 7 = 0
3 / 7 = 0
3 // 8 = 0
3 / 8 = 0
3 // 9 = 0
3 / 9 = 0
4 // 1 = 4
4 / 1 = 4
4 // 2 = 2
4 / 2 = 2
4 // 3 = 1
4 / 3 = 1
4 // 4 = 1
4 / 4 = 1
4 // 5 = 0
4 / 5 = 0
4 // 6 = 0
4 / 6 = 0
4 // 7 = 0
4 / 7 = 0
4 // 8 = 0
4 / 8 = 0
4 // 9 = 0
4 / 9 = 0
5 // 1 = 5
5 / 1 = 5
5 // 2 = 2
5 / 2 = 2
5 // 3 = 1
5 / 3 = 1
5 // 4 = 1
5 / 4 = 1
5 // 5 = 1
5 / 5 = 1
5 // 6 = 0
5 / 6 = 0
5 // 7 = 0
5 / 7 = 0
5 // 8 = 0
5 / 8 = 0
5 // 9 = 0
5 / 9 = 0
6 // 1 = 6
6 / 1 = 6
6 // 2 = 3
6 / 2 = 3
6 // 3 = 2
6 / 3 = 2
6 // 4 = 1
6 / 4 = 1
6 // 5 = 1
6 / 5 = 1
6 // 6 = 1
6 / 6 = 1
6 // 7 = 0
6 / 7 = 0
6 // 8 = 0
6 / 8 = 0
6 // 9 = 0
6 / 9 = 0
7 // 1 = 7
7 / 1 = 7
7 // 2 = 3
7 / 2 = 3
7 // 3 = 2
7 / 3 = 2
7 // 4 = 1
7 / 4 = 1
7 // 5 = 1
7 / 5 = 1
7 // 6 = 1
7 / 6 = 1
7 // 7 = 1
7 / 7 = 1
7 // 8 = 0
7 / 8 = 0
7 // 9 = 0
7 / 9 = 0
8 // 1 = 8
8 / 1 = 8
8 // 2 = 4
8 / 2 = 4
8 // 3 = 2
8 / 3 = 2
8 // 4 = 2
8 / 4 = 2
8 // 5 = 1
8 / 5 = 1
8 // 6 = 1
8 / 6 = 1
8 // 7 = 1
8 / 7 = 1
8 // 8 = 1
8 / 8 = 1
8 // 9 = 0
8 / 9 = 0
9 // 1 = 9
9 / 1 = 9
9 // 2 = 4
9 / 2 = 4
9 // 3 = 3
9 / 3 = 3
9 // 4 = 2
9 / 4 = 2
9 // 5 = 1
9 / 5 = 1
9 // 6 = 1
9 / 6 = 1
9 // 7 = 1
9 / 7 = 1
9 // 8 = 1
9 / 8 = 1
9 // 9 = 1
9 / 9 = 1
>>>
prouve (presque?) tout le temps a/b
est égal à a//b
. Y a-t-il un moment où ce ne soit pas? Sinon, pourquoi Python 2 inclut-il deux opérateurs qui font la même chose?
//
est l'opérateur Floored-Division en Python. Le résultat sera facilement perceptible si vous essayez de diviser des valeurs en virgule flottante
# Python 2
>>> 10.0 / 3
3.3333333333333335
>>> 10.0 // 3
3.0
En Python2, diviser deux ints utilise la division entière, ce qui vous donne la même chose que la division floored. Cependant, vous pouvez toujours utiliser //
pour obtenir un résultat pondéré de la division en virgule flottante.
Dans Python3 , diviser deux entiers donne un float, mais utiliser //
agit comme une division entière.
# Python3
>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3
Si vous travaillez (toujours) en Python2, mais souhaitez convertir un jour en Python3, vous devez toujours utiliser //
lors de la division de deux ints, ou utiliser from __future__ import division
pour obtenir le comportement Python3 dans Python2.
En python 2.7, pour faire une division réelle, vous devez importer une division à partir d'un module nommé future:
from __future__ import division
Ensuite, le /
sera la vraie division (flottante), exemple:
15 / 4 = 3.75
Et le //
sera la division entière (la partie entière de la division réelle), exemple:
15 // 4 = 3