Ответ 1
Взгляните на PEP-238: изменение оператора отдела
Оператор//будет иметь возможность запросить разделение по полу однозначно.
Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/2
1.0
Это предназначено? Я сильно помню предыдущие версии, возвращающие int/int=int
? Что мне делать, есть ли новый оператор деления или должен ли я всегда использовать?
Взгляните на PEP-238: изменение оператора отдела
Оператор//будет иметь возможность запросить разделение по полу однозначно.
Не удалось сразу найти 2//2
.
Надеюсь, что это может помочь кому-то мгновенно.
В Python 2.7: по умолчанию оператор деления возвращает целочисленный вывод.
чтобы получить результат в double multiple 1.0 в "дивиденд или делитель"
100/35 => 2 #(Expected is 2.857142857142857)
(100*1.0)/35 => 2.857142857142857
100/(35*1.0) => 2.857142857142857
В Python 3
// => used for integer output
/ => used for double output
100/35 => 2.857142857142857
100//35 => 2
100.//35 => 2.0 # floating-point result if divsor or dividend real
В принятом ответе уже упоминается 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__
, который должен вернуть результат на основе /
С Python 3.0 изменения PEP 238 стали по умолчанию, и в объектной модели Python не существует особого метода __div__
.
Если вы хотите использовать тот же код в Python 2 и Python 3, используйте
from __future__ import division
и придерживаться семантики PEP 238 /
и //
.