A resposta aceita já menciona o PEP 238 . Eu só quero adicionar uma rápida olhada nos bastidores para os interessados no que está acontecendo sem ler todo o PEP.
Python mapeia operadores como +
, -
, *
e /
para funções especiais, de tal modo que por exemplo, a + b
é equivalente a
a.__add__(b)
Em relação à divisão no Python 2, há por padrão apenas /
quais mapas são mapeados __div__
e o resultado depende dos tipos de entrada (por exemplo int
, float
).
O Python 2.2 introduziu o __future__
recurso division
, que alterou a semântica da divisão da seguinte maneira (TL; DR do PEP 238):
/
mapas para os __truediv__
quais "deve retornar uma aproximação razoável do resultado matemático da divisão" (citação do PEP 238)
//
mapas para __floordiv__
, que devem retornar o resultado do/
Com o Python 3.0, as alterações do PEP 238 se tornaram o comportamento padrão e não há mais método especial __div__
no modelo de objeto do Python.
Se você deseja usar o mesmo código no Python 2 e Python 3, use
from __future__ import division
e mantenha a semântica do PEP 238 de /
e //
.