2016-05-06 4 views
1

Python 2 имеет два оператора деления: / и //. Следующий вывод:Разница между «//» и «/» в Python 2

========================================= RESTART: Shell ========================================= 
>>> for x in range(10): 
     for y in range(1, 10): 
       print x,'//',y,'=',x//y 
       print x,'/',y,'=',x/y 
       print 


0 // 1 = 0 
0/1 = 0 

0 // 2 = 0 
0/2 = 0 

0 // 3 = 0 
0/3 = 0 

0 // 4 = 0 
0/4 = 0 

0 // 5 = 0 
0/5 = 0 

0 // 6 = 0 
0/6 = 0 

0 // 7 = 0 
0/7 = 0 

0 // 8 = 0 
0/8 = 0 

0 // 9 = 0 
0/9 = 0 

1 // 1 = 1 
1/1 = 1 

1 // 2 = 0 
1/2 = 0 

1 // 3 = 0 
1/3 = 0 

1 // 4 = 0 
1/4 = 0 

1 // 5 = 0 
1/5 = 0 

1 // 6 = 0 
1/6 = 0 

1 // 7 = 0 
1/7 = 0 

1 // 8 = 0 
1/8 = 0 

1 // 9 = 0 
1/9 = 0 

2 // 1 = 2 
2/1 = 2 

2 // 2 = 1 
2/2 = 1 

2 // 3 = 0 
2/3 = 0 

2 // 4 = 0 
2/4 = 0 

2 // 5 = 0 
2/5 = 0 

2 // 6 = 0 
2/6 = 0 

2 // 7 = 0 
2/7 = 0 

2 // 8 = 0 
2/8 = 0 

2 // 9 = 0 
2/9 = 0 

3 // 1 = 3 
3/1 = 3 

3 // 2 = 1 
3/2 = 1 

3 // 3 = 1 
3/3 = 1 

3 // 4 = 0 
3/4 = 0 

3 // 5 = 0 
3/5 = 0 

3 // 6 = 0 
3/6 = 0 

3 // 7 = 0 
3/7 = 0 

3 // 8 = 0 
3/8 = 0 

3 // 9 = 0 
3/9 = 0 

4 // 1 = 4 
4/1 = 4 

4 // 2 = 2 
4/2 = 2 

4 // 3 = 1 
4/3 = 1 

4 // 4 = 1 
4/4 = 1 

4 // 5 = 0 
4/5 = 0 

4 // 6 = 0 
4/6 = 0 

4 // 7 = 0 
4/7 = 0 

4 // 8 = 0 
4/8 = 0 

4 // 9 = 0 
4/9 = 0 

5 // 1 = 5 
5/1 = 5 

5 // 2 = 2 
5/2 = 2 

5 // 3 = 1 
5/3 = 1 

5 // 4 = 1 
5/4 = 1 

5 // 5 = 1 
5/5 = 1 

5 // 6 = 0 
5/6 = 0 

5 // 7 = 0 
5/7 = 0 

5 // 8 = 0 
5/8 = 0 

5 // 9 = 0 
5/9 = 0 

6 // 1 = 6 
6/1 = 6 

6 // 2 = 3 
6/2 = 3 

6 // 3 = 2 
6/3 = 2 

6 // 4 = 1 
6/4 = 1 

6 // 5 = 1 
6/5 = 1 

6 // 6 = 1 
6/6 = 1 

6 // 7 = 0 
6/7 = 0 

6 // 8 = 0 
6/8 = 0 

6 // 9 = 0 
6/9 = 0 

7 // 1 = 7 
7/1 = 7 

7 // 2 = 3 
7/2 = 3 

7 // 3 = 2 
7/3 = 2 

7 // 4 = 1 
7/4 = 1 

7 // 5 = 1 
7/5 = 1 

7 // 6 = 1 
7/6 = 1 

7 // 7 = 1 
7/7 = 1 

7 // 8 = 0 
7/8 = 0 

7 // 9 = 0 
7/9 = 0 

8 // 1 = 8 
8/1 = 8 

8 // 2 = 4 
8/2 = 4 

8 // 3 = 2 
8/3 = 2 

8 // 4 = 2 
8/4 = 2 

8 // 5 = 1 
8/5 = 1 

8 // 6 = 1 
8/6 = 1 

8 // 7 = 1 
8/7 = 1 

8 // 8 = 1 
8/8 = 1 

8 // 9 = 0 
8/9 = 0 

9 // 1 = 9 
9/1 = 9 

9 // 2 = 4 
9/2 = 4 

9 // 3 = 3 
9/3 = 3 

9 // 4 = 2 
9/4 = 2 

9 // 5 = 1 
9/5 = 1 

9 // 6 = 1 
9/6 = 1 

9 // 7 = 1 
9/7 = 1 

9 // 8 = 1 
9/8 = 1 

9 // 9 = 1 
9/9 = 1 

>>> 

доказывает (почти?) Все время a/b равно a//b. Есть ли время, когда это не так? Если нет, то почему Python 2 включает в себя два оператора, которые делают то же самое?

+1

При применении к целым числам в Python 2.x, '/' и '//' являются точно такими же. Попробуйте те же тесты в Python 3.x и подготовьтесь к неожиданностям. Наличие двух операторов было способом подготовки к будущему. –

+0

'from __future__ import division' –

+0

Новый оператор' // 'деления был введен [PEP 238 - Изменение оператора отдела] (https://www.python.org/dev/peps/pep-0238/). Чтобы получить деление стиля «будущее» (Python 3) по умолчанию, запустите свою программу с помощью импорта из ['__future__'] (https://docs.python.org/2/library/__future__.html), который Питер Вуд прокомментировал выше. –

ответ

6

// является оператором поэтажного разделения в Python. Результат будет легко заметить, если вы пытаетесь деления с плавающей запятой значения

# Python 2 
>>> 10.0/3 
3.3333333333333335 
>>> 10.0 // 3 
3.0 

В python2, разделив два целых использует целочисленное деление, которое заканчивается тем, что получили вас то же самое, как этажном разделения. Однако вы можете использовать //, чтобы получить результат с плавающей запятой. В Python3 разделение двух ints приводит к поплавке, но использование // действует как целочисленное деление.

# Python3 
>>> 10/3 
3.3333333333333335 
>>> 10 // 3 
3 
+0

Спасибо. Теперь я понимаю. –

+1

В Python 2 вы можете 'из __future__ import division' получить поведение Python 3'/'. – kindall

+0

@Qlstudio, следовательно, если вы хотите, чтобы ваш код использовался в будущем как python3, всегда используйте '//' при делении двух ints –

0

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

from __future__ import division 

Затем / будет реальным (плавающая) разделение, например:

15/4 = 3.75 

И // будет целочисленное деление (целая часть вещественного деления), например:

15 // 4 = 3 
Смежные вопросы