2.3.1.7 Операторы и их приоритеты
Operators and their priorities
До сих пор мы относились к каждому оператору так, как будто он не связан с другими. Очевидно, что такая идеальная и простая ситуация - большая редкость в реальном программировании.
Кроме того, вы очень часто встретите более одного оператора в одном выражении, и тогда это предположение уже не так очевидно.
Рассмотрим следующее выражение:
2 + 3 * 5
Вы, наверное, помните из школы, что умножение предшествует сложению.
Вы, конечно же, помните, что вам нужно сначала умножить 3 на 5 и, сохранив 15 в своей памяти, затем прибавить его к 2, получив таким образом результат 17.
Явление, которое заставляет одних операторов действовать раньше других, известно как иерархия приоритетов.
Python точно определяет приоритеты всех операторов и предполагает, что операторы с более высоким приоритетом выполняют свои операции перед операторами с более низким приоритетом.
Итак, если вы знаете, что * имеет более высокий приоритет, чем +, вычисление окончательного результата должно быть очевидным.
Операторы и их привязки
Привязка оператора определяет порядок вычислений, выполняемых некоторыми операторами с равным приоритетом, помещенными рядом в одном выражении.
Большинство операторов Python имеют левостороннюю привязку, что означает, что вычисление выражения выполняется слева направо.
Этот простой пример покажет вам, как это работает. Взглянем:
print(9 % 6 % 2)
Есть два возможных способа вычисления этого выражения:
Результат должен быть 1. Этот оператор имеет левостороннюю привязку. Но есть одно интересное исключение.
До сих пор мы относились к каждому оператору так, как будто он не связан с другими. Очевидно, что такая идеальная и простая ситуация - большая редкость в реальном программировании.
Кроме того, вы очень часто встретите более одного оператора в одном выражении, и тогда это предположение уже не так очевидно.
Рассмотрим следующее выражение:
2 + 3 * 5
Вы, наверное, помните из школы, что умножение предшествует сложению.
Вы, конечно же, помните, что вам нужно сначала умножить 3 на 5 и, сохранив 15 в своей памяти, затем прибавить его к 2, получив таким образом результат 17.
Явление, которое заставляет одних операторов действовать раньше других, известно как иерархия приоритетов.
Python точно определяет приоритеты всех операторов и предполагает, что операторы с более высоким приоритетом выполняют свои операции перед операторами с более низким приоритетом.
Итак, если вы знаете, что * имеет более высокий приоритет, чем +, вычисление окончательного результата должно быть очевидным.
Операторы и их привязки
Привязка оператора определяет порядок вычислений, выполняемых некоторыми операторами с равным приоритетом, помещенными рядом в одном выражении.
Большинство операторов Python имеют левостороннюю привязку, что означает, что вычисление выражения выполняется слева направо.
Этот простой пример покажет вам, как это работает. Взглянем:
print(9 % 6 % 2)
Есть два возможных способа вычисления этого выражения:
- слева направо: сначала 9 % 6 дает 3, а затем 3 % 2 дает 1;
- справа налево: сначала 6 % 2 дает 0, а затем 9 % 0 вызывает фатальную ошибку.
Результат должен быть 1. Этот оператор имеет левостороннюю привязку. Но есть одно интересное исключение.