В чем разница между '/' и '//' при использовании для деления? - PullRequest
391 голосов
/ 08 октября 2008

Есть ли преимущество в использовании одного над другим? В Python 2 оба они, похоже, возвращают одинаковые результаты:

>>> 6/3
2
>>> 6//3
2

Ответы [ 13 ]

536 голосов
/ 08 октября 2008

В Python 3.0 5 / 2 вернет 2.5 и 5 // 2 вернет 2. Первая - это деление с плавающей запятой, а вторая - деление по полу, иногда также называемое целочисленным делением.

В Python 2.2 или новее в строке 2.x нет разницы для целых чисел, если вы не выполните from __future__ import division, что заставляет Python 2.x принять поведение 3.0

Независимо от будущего импорта, 5.0 // 2 вернет 2.0, поскольку это результат операции деления по полу.

Подробное описание можно найти на https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator

62 голосов
/ 23 июля 2012

Это помогает уточнить для строки Python 2.x, / не является ни делением по полу, ни истинным делением. Текущий принятый ответ не ясен по этому вопросу. / - деление по полу, когда оба аргумента являются целыми, но это истинное деление, когда один или оба аргумента являются плавающими.

Вышесказанное говорит о гораздо большей правде и намного яснее, чем второй абзац в принятом ответе.

31 голосов
/ 08 октября 2008

// реализует «разделение по этажам», независимо от вашего типа. Так 1.0/2.0 даст 0.5, но и 1/2, 1//2 и 1.0//2.0 даст 0.

Подробнее см. https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator

27 голосов
/ 24 июля 2016

/ -> Деление с плавающей точкой

// -> Этажное деление

Давайте рассмотрим некоторые примеры как в Python 2.7, так и в Python 3.5.

Python 2.7.10 против Python 3.5

print (2/3)  ----> 0                   Python 2.7
print (2/3)  ----> 0.6666666666666666  Python 3.5

Python 2.7.10 против Python 3.5

  print (4/2)  ----> 2         Python 2.7
  print (4/2)  ----> 2.0       Python 3.5

Теперь, если вы хотите иметь (в python 2.7) тот же вывод, что и в python 3.5, вы можете сделать следующее:

Python 2.7.10

from __future__ import division
print (2/3)  ----> 0.6666666666666666   #Python 2.7
print (4/2)  ----> 2.0                  #Python 2.7

Где, поскольку нет разницы между делением на этаж в Python 2.7 и в Python 3.5

138.93//3 ---> 46.0        #Python 2.7
138.93//3 ---> 46.0        #Python 3.5
4//3      ---> 1           #Python 2.7
4//3      ---> 1           #Python 3.5
20 голосов
/ 10 ноября 2009

Как все уже ответили, // - это разделение по полу.

Почему это важно, так это то, что // является однозначно разделенным по полу во всех версиях Python от 2.2, включая версии Python 3.x.

Поведение / может меняться в зависимости от:

  • Актив __future__ импорт или нет (локальный модуль)
  • Параметр командной строки Python, -Q old или -Q new
10 голосов
/ 18 марта 2014
>>> print 5.0 / 2
2.5

>>> print 5.0 // 2
2.0
6 голосов
/ 05 февраля 2017

Python 2.7 и другие будущие версии python:

  • Деление (/)

Делит левый операнд на правый операнд

Пример: 4 / 2 = 2

  • Этажный отдел (//)

Деление операндов, где результатом является частное, в котором удаляются цифры после десятичной точки. Но если один из операндов отрицателен, результат получается беспорядочным, то есть округляется от нуля (в сторону отрицательной бесконечности):

Примеры: 9//2 = 4 и 9.0//2.0 = 4.0, -11//3 = -4, -11.0//3 = -4.0

Оба / подразделения и // оператор подразделения пола работают одинаково.

4 голосов
/ 08 октября 2008

Двойная косая черта, //, напольное деление:

>>> 7//3
2
3 голосов
/ 03 июня 2015

Ответ уравнения округляется до следующего меньшего целого числа или числа с плавающей запятой .0 в качестве десятичной точки.

>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0
3 голосов
/ 08 октября 2008

// - деление по этажам, оно всегда даст вам целое число результата. Другое «регулярное» деление.

...