В Python 2, в чем разница между '/' и '//' при использовании для разделения?

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

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

10 ответов


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

в Python 2.2 или более поздней версии в 2.линия х, нет никакой разницы для целых чисел, если вы не выполните 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


это помогает уточнить для Python 2.x линия,/ не является ни разделением пола, ни истинным разделением. Ток ответа не ясно. / разделение пола, когда оба args являются int, но является истинным разделением, когда либо или оба args являются float.

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


// реализует "разделение пола", независимо от вашего типа. Так 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 для деталей


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

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

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

  • активный __future__ импорт или нет (модуль-местные)
  • опция командной строки Python, либо -Q old или -Q new

/ --> деление с плавающей запятой

// --> этаж отдел

давайте посмотрим некоторые примеры как в 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

>>> print 5.0 / 2
2.5

>>> print 5.0 // 2
2.0

**

  1. Python 2.7 и другая предстоящая версия python:

** / Division Делит левый операнд на правый операнд бывший:: 4 / 2 = 2

Floor Division (//) - деление операндов, где результатом является фактор, в котором удаляются цифры после десятичной точки. Но если один из операндов отрицательный, то результат округляется от нуля (в сторону отрицательной бесконечности): образцы: 9//2 = 4 и 9.0//2.0 = 4.0, -11//3 = -4, -11.0//3 = -4.0

оба оператора / Division и / / floor division работают аналогичным образом


двойной Слэш, //, деление пола:

>>> 7//3
2

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

>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0

// Это деление пола, оно всегда будет давать вам целочисленный пол результата. Другой - "регулярное" подразделение.