У прийнятій відповіді вже згадується PEP 238 . Я просто хочу додати швидкий погляд за лаштунками для тих, хто цікавиться тим, що відбувається, не читаючи цілого PEP.
Python карти операторів , як +
, -
, *
і /
до спеціальних функцій, таким чином, що , наприклад , a + b
еквівалентно
a.__add__(b)
Що стосується поділу в Python 2, то за замовчуванням існує лише те, на /
яке відображається, __div__
а результат залежить від типів введення (наприклад int
, float
).
Python 2.2 представив __future__
функцію division
, яка змінила семантику поділу наступним чином (TL; DR PEP 238):
/
карти, до __truediv__
яких має "повернути розумне наближення математичного результату поділу" (цитата з PEP 238)
//
карти в __floordiv__
, які повинні повернути floored результат/
З Python 3.0 зміни PEP 238 стали поведінкою за замовчуванням, і більше немає спеціального методу __div__
в об'єктній моделі Python.
Якщо ви хочете використовувати один і той же код у Python 2 та Python 3, використовуйте
from __future__ import division
і дотримуватися PEP 238 семантики /
та //
.