Единый операторский этаж

Какие языки программирования, кроме Python, имеют разделение этажей как один оператор с точки зрения программистов? Почему оно вообще существует? Пожалуйста, не давайте мне ответ, потому что это возможно!

Сначала я поискал это в Google, но большинство результатов сводятся к одному и тому же с помощью комбинации оператора и вызова функции. Да!

Большинство языков делают это при вызове целочисленных операндов. Но я думаю, это не тот ответ, который вы ищете. — В R есть специальный оператор, очень похожий на Python (%/%).

Konrad Rudolph 02.05.2024 13:54

@KonradRudolph Спасибо, но нет, это не тот ответ, которого я жду.

stackoverblown 02.05.2024 13:58

@KonradRudolph Я сомневаюсь, что большинство языков так делают. Можете ли вы назвать некоторые?

no comment 02.05.2024 14:28

@nocomment C, C++, C#, Java и т. д. Мне следовало уточнить, что под «большинством» я имею в виду статически типизированные языки. Большинство динамически типизированных языков, вероятно, этого не делают.

Konrad Rudolph 02.05.2024 14:33

@KonradRudolph Как это выглядит на Java? Я попробовал (-11) / 10 там и это дало -1, а не -2.

no comment 02.05.2024 14:35

@nocomment О, это действительно хороший момент, я мысленно заменил «поэтажное деление» на «целочисленное деление», что, очевидно, не одно и то же. Теперь мне любопытно, действительно ли ОП действительно интересовался делением этажей, а не целочисленным делением.

Konrad Rudolph 02.05.2024 14:38

Мы здесь обычно не просим список вещей, и это не очень продуктивно. Есть ли у вас более практический вопрос, на который можно ответить по этому поводу?

deceze 02.05.2024 15:33

@deceze Судя по всему, списка пока нет. Это больше похоже на отсутствие. Также на момент публикации этого комментария не дан ответ на вопрос о его существовании.

stackoverblown 02.05.2024 15:38

Вот PEP Python, в котором представлен оператор деления этажей // (возможно, это «самый официальный документ Python» по этой теме): peps.python.org/pep-0238 – он дает некоторое обоснование того, почему этот оператор представил. Вам это помогло или вы уже это нашли?

simon 02.05.2024 15:41

Немного справочной информации (я не знаю, как долго вы программируете на Python): до Python 2 включительно деление давало разные результаты в зависимости от того, были ли разделены целые числа или числа с плавающей запятой (например, 3/2 == 1 против 3./2. == 1.5). Это было немного неожиданное поведение, учитывая, что Python обычно не особо заботится о числовых типах. Предоставление явного оператора деления нижнего предела помогает решить эту проблему: в Python 3, независимо от того, заданы ли целые числа или числа с плавающей запятой, / всегда обеспечивает истинное деление. Чтобы сохранить поведение целочисленного деления Python 2, можно использовать //.

simon 02.05.2024 15:48

@KonradRudolph Я имел в виду одного, а не ни одного. Виноват.

stackoverblown 02.05.2024 16:12

@nocomment Когда я говорил о двух операторах, я на самом деле имел в виду оператор и вызов функции. Я отредактировал вопрос.

stackoverblown 02.05.2024 16:37

@simon Я думаю, тебе следует переместить комментарий в ответ.

stackoverblown 02.05.2024 16:41

@KonradRudolph Я думаю, тебе следует поставить %/% в качестве ответа, чтобы я мог хотя бы проголосовать за него.

stackoverblown 02.05.2024 16:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
14
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот частичный ответ, касающийся второй части вопроса: почему [явный оператор разделения этажей //] вообще существует [в Python]? По сути, это краткое изложение соответствующих частей PEP 238, моими словами.

Вплоть до Python 2.X включительно деление с помощью оператора деления / давало разные результаты в зависимости от того, были ли разделены значения целочисленных типов или типов с плавающей запятой (например, 3.0/2.0 == 1.5; но 3/2 == 1 аналогично целочисленному делению, например, в C/C++, по крайней мере для положительные числа). Это было немного удивительное поведение, учитывая, что Python обычно не особо заботится о типах чисел (например, sqrt(2.0) == sqrt(2)). Более того, в ситуациях, когда пользователь фрагмента кода Python контролировал типы входных данных для разделения, программисту этого фрагмента кода было очень утомительно следить за тем, чтобы использовалось предполагаемое разделение, что облегчало создать потенциальную ошибку (например, если программист функции неявно ожидал ввода с плавающей запятой и, следовательно, «истинного» деления, но пользователь функции предоставил целые числа, результат может быть совершенно неверным).

Таким образом, PEP 238 предложил путь разрешения этой далеко не идеальной ситуации, который был принят в спецификацию языка Python:

  • Начиная с Python 2.2, был доступен явный оператор нижнего деления //, позволяющий всегда вести себя так, как если бы в качестве входных данных для деления были предоставлены целые числа. Оператор деления / на данный момент сохранил оригинальное (то есть неоднозначное/неинтуитивное) поведение. Однако, используя from __future__ import division поверх своего модуля, программисты уже могли ввести другое поведение; а именно, всегда получать «истинное» деление с / внутри своего модуля, независимо от того, были ли в качестве входных данных заданы целые числа или числа с плавающей запятой.
  • Начиная с Python 3, независимо от того, заданы ли целые числа или числа с плавающей запятой, / теперь всегда обеспечивает «истинное» деление. Чтобы сохранить поведение целочисленного деления Python 2, // все еще можно использовать.

Как уже было сказано, это всего лишь краткое изложение ПЭП моими словами. Для получения дополнительной информации я бы предложил прочитать исходный документ, ссылку на который я дал выше. Написано действительно хорошо и более подробно. Например, здесь также обсуждаются потенциальные (отклоненные) альтернативы разрешению предыдущего поведения оператора /.

Другие вопросы по теме