В принятом ответе уже упоминается PEP 238 . Я просто хочу добавить быстрый взгляд за кулисы для тех, кто интересуется происходящим, не читая весь ПКП.
Python карты операторов , как +
, -
, *
и /
к специальным функциям, таким образом, что , например , a + b
эквивалентно
a.__add__(b)
Что касается деления в Python 2, по умолчанию существует только то, /
что отображается на, __div__
и результат зависит от типов ввода (например int
, float
).
В Python 2.2 появилась __future__
функция division
, которая изменила семантику деления следующим образом (TL; DR из PEP 238):
/
карты, на __truediv__
которые необходимо «возвращать разумное приближение математического результата деления» (цитата из PEP 238)
//
карты __floordiv__
, которые должны вернуть результат/
В Python 3.0 изменения PEP 238 стали поведением по умолчанию, и __div__
в объектной модели Python больше нет специального метода .
Если вы хотите использовать один и тот же код в Python 2 и Python 3, используйте
from __future__ import division
и придерживаться семантики PEP 238 /
и //
.