Найти в Дзене
Машинное обучение

Целочисленное деление в Python

Целочисленное деление 

Как вы знаете, в Python есть два способа делить целые числа: 

Оператор / при делении целого числа на целое возвращает результат типа float. 

 

>>> 3 / 2

1.5 # float

А оператор // при делении целого на целое возвращает целое с округлением вниз, по-английски этот оператор еще называют floor division. 

 

>>> 3 // 2

1 # int

Копалась в истории языка и узнала, что изначально деление целых чисел в Python было только целочисленное, и для него Гвидо использовал символ /. Но быстро стало понятно, что в языке, где программист не объявляет типы явно, использование такого символа неудобно и будет приводить к обилию ошибок в программах. 

Поэтому часть сообщества (включая Гвидо) настаивала на том, что оператором целочисленного деления нужно выбрать символ //, а оператор деления, который возвращает тип float, должен быть /. Другие разработчики говорили, что целочисленное деление нужно писать как /, аргументируя это тем, что «научиться обращаться с целочисленным делением — это как обряд инициации для начинающих программистов», да и в C целочисленное деление пишется именно так. 

Вот что Гвидо пишет об этом в своем блоге (в моем вольном переводе):

Чтобы услышать мнение человека, далекого от программирования, я спросил свою подругу, которая занималась средневековой английской литературой. Разговор был примерно такой: 

Я: Вот ты берешь два целых числа. Хо#ошо ?

Она: Хорошо!

Я: Теперь ты можешь их сложить, вычесть, умножить в программе, правильно?

Она: Хм, конечно!

Я: А теперь предположим, что ты их делишь...

Она: Но в этом нет смысла! Целые числа образуют кольцо, а не поле. Ты ведь сказал, что взял эти числа из Z, верно?

Я: Ага.

Вот и все. Это точка зрения непрограммиста (с которой мне удобно согласиться). Целочисленное деление — это чушь и его не нужно писать как "/", даже если в C делают именно так;-)

Действительно, с точки зрения непрограммиста, целочисленное деление довольно странная история, ведь над целыми числами, как и над матрицами, нет деления в принципе!  

Источники: [1], [2].

#machinelearning #artificialintelligence #ai #datascience #python #programming #technology #deeplearning #bigdata

Python/ django

IT channels | каталог IT каналов