2013-02-11 3 views

ответ

3

// работает как «целочисленное разделение» в python3, взгляните на this answer.

В C раздел с / на целые числа работает как «разделение с полом» или «целочисленное разделение». Для обеспечения этой возможности python предоставляет оператор //, в отличие от /, который даст результат с плавающей запятой.

Официальная ссылка, безусловно, pep-238.

С версии командной строки (полезно, когда вы пытаетесь понять, что-то вроде этого):

Python 3.2.3 (default, Apr 11 2012, ... 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a = 10 
>>> a/3 
3.3333333333333335 
>>> a//3 
3 
>>> 
3

/, как вы знаете, делает классическое разделение. // оператор был добавлен в Python 2.2, который делает этажное подразделение, и с добавлением этого оператора вы можете использовать from __future__ import division, чтобы сделать / оператором do true подразделением.

a //= 3 эквивалентен a = a // 3.

Итак, вот резюме:

Python Version  operator/  operator // 
------------------------------------------------- 
2.1x and older  classic   Not Added 

2.2 and newer   classic   floor 
(without import)  

2.2 and newer   true    floor 
(with import) 
+0

Для nitpick это эквивалентно 'a = a .__ ifloordiv __ (3)', если этот метод определен (см. Http://docs.python.org/2/reference/datamodel.html#object.__ifloordiv__). Я думаю, что некоторые типы (возможно, массивы NumPy?) Переопределяют этот оператор, чтобы действовать на месте. Тем не менее, это редко имеет значение. – delnan

+0

@delnan - для типов, которые изменяются, api ожидает, что он действует на месте, хотя на самом деле это не так. – mgilson

0

// является пол деление: он делит и округляет вниз, хотя она по-прежнему производит поплавок, если операнды поплавки. В Python 2 это то же самое, что и регулярное деление для целых чисел, если вы не используете from __future__ import division, чтобы получить «истинное» поведение деления Python 3.

Итак, да, это немного сложно. По существу он существует, чтобы воссоздать поведение, которое вы получаете в Python 2, разделив два целых числа, поскольку это изменяется в Python 3.

В Python 2:

  • 11/52
  • 11.0/5.02.2
  • 11 // 52
  • 11.0 // 5.02.0

В Python 3, или Python 2 с from __future__ import division, или Python 2 запустить с -Q new:

  • 11/52.2
  • 11.0/5.02.2
  • 11 // 52
  • 11.0 // 5.02.0

И, конечно же, добавление = просто превращает его в оператор сочетания, такой как /=.