Приоритет операторов в питоне

Операторы и выражения¶

Большинство предложений (логических строк) в программах содержат выражения. Простой пример выражения: 2 + 3 . Выражение можно разделить на операторы и операнды.

Операторы — это некий функционал, производящий какие-либо действия, который может быть представлен в виде символов, как например + , или специальных зарезервированных слов. Операторы могут производить некоторые действия над данными, и эти данные называются операндами. В нашем случае 2 и 3 — это операнды.

Операторы¶

Кратко рассмотрим операторы и их применение:

Обратите внимание, вычислить значения выражений, данных в примерах, можно также используя интерпретатор интерактивно. Например, для проверки выражения 2 + 3 воспользуйтесь интерактивной командной строкой интерпретатора Python:

Операторы и их применение

Оператор Название Объяснение Примеры
+ Сложение Суммирует два объекта 3 + 5 даст 8 ;
‘a’ + ‘b’ даст ‘ab’
Вычитание Даёт разность двух чисел; если первый операнд отсутствует, он считается равным нулю -5.2 даст отрицательное число, а 50 — 24 даст 26 .
* Умножение Даёт произведение двух чисел или возвращает строку, повторённую заданное число раз. 2 * 3 даст 6 .
‘la’ * 3 даст ‘lalala’ .
** Возведение Возвращает число х , возведённое в степень y 3 ** 4 даст 81 (т. е. 3 * 3 * 3 * 3 )
/ Деление Возвращает частное от деления x на y 4 / 3 даст 1.3333333333333333 .
// Целочисленное деление Возвращает неполное частное от деления 4 // 3 даст 1 . -4 // 3 даст -2 .
% Деление по модулю Возвращает остаток от деления 8 % 3 даст 2 .
-25.5 % 2.25 даст 1.5 .
Сдвиг влево Сдвигает биты числа влево на заданное количество позиций. (Любое число в памяти компьютера представлено в виде битов — или двоичных чисел, т. е. 0 и 1 ) 2
>> Сдвиг вправо Сдвигает биты числа вправо на заданное число позиций. 11 >> 1 даст 5 . В двоичном виде 11 представляется как 1011 , что будучи смещённым на 1 бит вправо, даёт 101 , а это, в свою очередь, не что иное как десятичное 5
& Побитовое И Побитовая операция И над числами 5 & 3 даёт 1 .
| Побитовое ИЛИ Побитовая операция ИЛИ над числами 5 | 3 даёт 7
^ Побитовое ИСКЛЮЧИТЕЛЬНО ИЛИ Побитовая операция ИСКЛЮЧИТЕЛЬНО ИЛИ 5 ^ 3 даёт 6
~ Побитовое НЕ Побитовая операция НЕ для числа x соответствует -(x+1) ~5 даёт -6 .
Меньше Определяет, верно ли, что x меньше y . Все операторы сравнения возвращают True или False 1 . Обратите внимание на заглавные буквы в этих словах. 5 < 3 даст False , а 3 < 5 даст True . Можно составлять произвольные цепочки сравнений: 3 < 5 < 7 даёт True .
> Больше Определяет, верно ли, что x больше y 5 > 3 даёт True . Если оба операнда — числа, то перед сравнением они оба преобразуются к одинаковому типу. В противном случае всегда возвращается False .
Меньше или равно Определяет, верно ли, что x меньше или равно y x = 3; y = 6; x
>= Больше или равно Определяет, верно ли, что x больше или равно y x = 4; y = 3; x >= 3 даёт True .
== Равно Проверяет, одинаковы ли объекты x = 2; y = 2; x == y даёт True .
x = ‘str’; y = ‘stR’; x == y даёт False .
x = ‘str’; y = ‘str’; x == y даёт True .
!= Не равно Проверяет, верно ли, что объекты не равны x = 2; y = 3; x != y даёт True .
not Логическое НЕ Если x равно True , оператор вернёт False . Если же x равно False , получим True . x = True; not x даёт False .
and Логическое И x and y даёт False , если x равно False , в противном случае возвращает значение y x = False; y = True; x and y возвращает False , поскольку x равно False . В этом случае Python не станет проверять значение y , так как уже знает, что левая часть выражения ‘and’ равняется False , что подразумевает, что и всё выражение в целом будет равно False , независимо от значений всех остальных операндов. Это называется укороченной оценкой булевых (логических) выражений.
or Логическое ИЛИ Если x равно True , в результате получим True , в противном случае получим значение y x = True; y = False; x or y даёт True . Здесь также может производиться укороченная оценка выражений.

Краткая запись математических операций и присваивания¶

Зачастую результат проведения некой математической операции необходимо присвоить переменной, над которой эта операция производилась. Для этого существуют краткие формы записи выражений:

Обратите внимание, что выражения вида » переменная = переменная операция выражение » принимает вид » переменная операция = выражение «.

Порядок вычисления¶

Если имеется выражение вида 2 + 3 * 4 , что производится раньше: сложение или умножение? Школьный курс математики говорит нам, что умножение должно производиться в первую очередь. Это означает, что оператор умножения имеет более высокий приоритет, чем оператор сложения.

Следующая таблица показывает приоритет операторов в Python, начиная с самого низкого (самое слабое связывание) и до самого высокого (самое сильное связывание). Это означает, что в любом выражении Python сперва вычисляет операторы и выражения, расположенные внизу таблицы, а затем операторы выше по таблице.

Эта таблица взята из Справочника по языку Python (англ.) и приводится здесь для полноты описания. На практике лучше использовать скобки для группировки операторов и операндов, чтобы в явном виде указать порядок вычисления выражений. Заодно это облегчит чтение программы. Более подробно см. в разделе Изменение порядка вычисления ниже.

Приоритет операторов

Оператор Описание
lambda лямбда-выражение
or Логическое «ИЛИ»
and Логическое «И»
not x Логическое «НЕ»
in , not in Проверка принадлежности
is , is not Проверка тождественности
< , , >= , != , == Сравнения
| Побитовое «ИЛИ»
^ Побитовое «ИСКЛЮЧИТЕЛЬНО ИЛИ»
& Побитовое «И»
> Сдвиги
+ , — Сложение и вычитание
* , / , // , % Умножение, деление, целочисленное деление и остаток от деления
+x , -x Положительное, отрицательное
~x Побитовое НЕ
** Возведение в степень
x.attribute Ссылка на атрибут
x[индекс] Обращение по индексу
x[индекс1:индекс2] Вырезка
f(аргументы . ) Вызов функции
(выражения, . ) Связка или кортеж 2
[выражения, . ] Список
Словарь

Операторы, о которых мы не упомянули, будут объяснены в дальнейших главах.

В этой таблице операторы с равным приоритетом расположены в одной строке. Например, + и — имеют равный приоритет.

Изменение порядка вычисления¶

Для облегчения чтения выражений можно использовать скобки. Например, 2 + (3 * 4) определённо легче понять, чем 2 + 3 * 4 , которое требует знания приоритета операторов. Как и всё остальное, скобки нужно использовать разумно (не перестарайтесь) и избегать излишних, как в (2 + (3 * 4)) .

Есть ещё одно преимущество в использовании скобок — они дают возможность изменить порядок вычисления выражений. Например, если сложение необходимо произвести прежде умножения, можно записать нечто вроде (2 + 3) * 4 .

Ассоциативность¶

Операторы обычно обрабатываются слева направо. Это означает, что операторы с равным приоритетом будут обработаны по порядку от левого до правого. Например, 2 + 3 + 4 обрабатывается как (2 + 3) + 4 .

Выражения¶

Пример (сохраните как expression.py ):

length = 5 breadth = 2 area = length * breadth print('Площадь равна', area) print('Периметр равен', 2 * (length + breadth)) 
$ python expression.py Площадь равна 10 Периметр равен 14 

Как это работает:

Длина и ширина прямоугольника хранятся в переменных length и breadth соответственно. Мы используем их для вычисления периметра и площади прямоугольника при помощи выражений. Результат выражения length * breadth сохраняется в переменной area , после чего выводится на экран функцией print . Во втором случае мы напрямую подставляем значение выражения 2 * (length + breadth) в функцию print .

Также обратите внимание, как Python «красиво печатает» результат. Несмотря на то, что мы не указали пробела между ‘Площадь равна’ и переменной area , Python подставляет его за нас, чтобы получить красивый и понятный вывод. Программа же остаётся при этом легкочитаемой (поскольку нам не нужно заботиться о пробелах между строками, которые мы выводим). Это пример того, как Python облегчает жизнь программисту.

Резюме¶

Мы увидели, как пользоваться операторами, операндами и выражениями. Это основные строительные блоки любой программы. Далее мы увидим, как это применить на практике.

  1. «True» — англ. «Верно (Правда)»; «False» — англ. «Ошибочно (Ложь)». (прим. перев.) ↩
  2. «tuple» — англ. «кортеж» (прим. перев.) ↩

Источник

№29 Приоритетность и ассоциативность операторов / для начинающих

В этом материале рассмотрим приоритетность и ассоциативность операторов в Python. Тема очень важна для понимания семантики операторов Python.

После прочтения вы должны понимать, как Python определяет порядок исполнения операторов. У некоторых из них более высокий уровень приоритета. Например, оператор умножения более приоритетный по сравнению с операторами сложения или вычитания.

В выражении интерпретатор Python выполняет операторы с более высоким уровнем приоритета первыми. И за исключением оператора возведения в степень ( ** ) они выполняются слева направо.

Приоритетность операторов в Python

Как работает приоритетность операторов в Python?

Выражение — это процесс группировки наборов значений, переменных, операторов и вызовов функций. При исполнении таких выражений интерпретатор Python выполняет их.

Здесь «3 + 4» — это выражение Python. Оно содержит один оператор и пару операндов. Но в более сложных инструкциях операторов может быть и несколько.

Для их выполнения Python руководствуется правилом приоритетности. Оно указывает на порядок операторов.

Примеры приоритетов операторов

В следующих примерах в сложных выражениях объединены по несколько операторов.

 
# Сначала выполняется умножение
# потом операция сложения
# Результат: 17
5 + 4 * 3

Однако порядок исполнения можно поменять с помощью скобок (). Они переопределяют приоритетность арифметический операций.

 
# Круглые скобки () переопределяют приоритет арифметических операторов
# Вывод: 27
(5 + 4) * 3

Следующая таблица демонстрирует приоритетность операторов от высокой до самой низкой.

Операторы Применение
Скобки (объединение)
f(args…) Вызов функции
x[index:index] Срез
x[index] Получение по индексу
x.attribute Ссылка на атрибут
** Возведение в степень
~x Побитовое нет
+x, -x Положительное, отрицательное число
*, /, % Умножение, деление, остаток
+, — Сложение, вычитание
> Сдвиг влево/вправо
& Побитовое И
^ Побитовое ИЛИ НЕ
| Побитовое ИЛИ
in, not in, is, is not, , >=, <>, !=, == Сравнение, принадлежность, тождественность
not x Булево НЕ
and Булево И
or Булево ИЛИ
lambda Лямбда-выражение

Ассоциативность операторов

В таблице выше можно увидеть, что некоторые группы включают по несколько операторов python. Это значит, что все представители одной группы имеют один уровень приоритетности.

При наличии двух или более операторов с одинаковым уровнем в дело вступает ассоциативность, определяющая порядок.

Что такое ассоциативность в Python?

Ассоциативность — это порядок, в котором Python выполняет выражения, включающие несколько операторов одного уровня приоритетности. Большая часть из них (за исключением оператора возведения в степень ** ) поддерживают ассоциативность слева направо.

Примеры

Например, у операторов умножения и деления приоритетность одинаковая. В одном выражении тот, что находится слева, будет выполняться первым.

Источник

Приоритеты операторов Python

Самые приоритетные операции вверху, снизу — с низким приоритетом. Вычисления выполняются слева направо, то есть, если в выражении встретятся операторы одинаковых приоритетов, первым будет выполнен тот, что слева.

Оператор возведения в степень исключение из этого правила. Из двух операторов ** сначала выполнится правый, а потом левый.

Операторы Описание
() Скобки
** Возведение в степень
+x , -x , ~x Унарные плюс, минус и битовое отрицание
* , / , // , % Умножение, деление, целочисленное деление, остаток от деления
+ , - Сложение и вычитание
> Битовые сдвиги
& Битовое И
^ Битовое исключающее ИЛИ ( XOR )
| Битовое ИЛИ
== , != , > , >= , < , Сравнение, проверка идентичности, проверка вхождения
not Логическое НЕ
and Логическое И
or Логическое ИЛИ
Мы используем файлы cookie

Наш сайт использует файлы cookie для улучшения пользовательского опыта, сбора статистики и обеспечения доступа к обучающим материалам. Мы также передаем информацию об использовании вами нашего сайт партерам по социальным сетям, рекламе и аналитике. В свою очередь, наши партнеры могут объединять ее с другой предоставленной вами информацией, или с информацией, которую они собрали в результате использования вами их услуг.

Источник

Читайте также:  Название документа
Оцените статью