Menu
Русский

Операторы Python: арифметические, сравнения, логические, принадлежности и идентичности

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

Операторы — это просто символы для действий

Оператор — это символ (или короткое ключевое слово), который говорит Python что-то сделать с одним или двумя значениями: сложить, сравнить, проверить, содержит ли одно другое. Несколько ты уже знаешь из базовой математики; у Python есть ещё пара для логики, вхождения и идентичности.

Пройдёмся по основным категориям по очереди.

Арифметические операторы

Стандартный набор плюс пара специфично-питоновских:

main.py
Output
Click Run to see the output here.

Два пункта из этого списка легко забыть:

  • / возвращает float даже когда оба операнда — целые. 10 / 2 даст тебе 5.0. Для целочисленного деления — //.
  • % — это модуло. n % 2 == 0 — самый чистый способ проверить, чётное ли n.

Python следует стандартному математическому приоритету: ** связывает сильнее * и /, которые сильнее + и -. Скобки перекрывают всё:

main.py
Output
Click Run to see the output here.

Если есть малейшее сомнение — щедро ставь скобки. Они ничего не стоят и делают намерение очевидным.

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

Шесть сравнений, каждое возвращает булев:

main.py
Output
Click Run to see the output here.

Python разрешает цепочки сравнений — это необычно и полезно:

main.py
Output
Click Run to see the output here.

Читается как «age не меньше 18 и меньше 65». Под капотом эквивалентно 18 <= age and age < 65, но внешне ближе к математической записи.

Логические операторы

Записываются английскими словами, а не символами:

main.py
Output
Click Run to see the output here.

Два момента, которые стоит знать:

Короткое замыкание. and останавливается на первом falsy значении; or — на первом truthy. Правая сторона вообще не вычисляется, если левая уже решила ответ. Это позволяет безопасно защищаться от ошибок:

main.py
Output
Click Run to see the output here.

and/or возвращают значение, а не всегда True/False. Они возвращают операнд, решивший результат:

main.py
Output
Click Run to see the output here.

В реальном коде встретишь name = user_input or "anonymous" — это паттерн значения по умолчанию, построенный на этом поведении.

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

= присваивает. Составные формы совмещают операцию с присваиванием:

main.py
Output
Click Run to see the output here.

Составные формы работают и со строками (s += "more"), и со списками (lst += [4, 5]). Они не быстрее полной формы; они просто короче.

Принадлежность: in и not in

Проверяет, есть ли значение внутри контейнера:

main.py
Output
Click Run to see the output here.

in работает на любом итерируемом — списках, кортежах, множествах, строках, словарях и так далее. Для больших проверок in на списке — O(n); in на множестве или словаре — O(1). Это важно, когда ты проверяешь принадлежность много раз.

Идентичность: is и is not

is проверяет, указывают ли две переменные на один и тот же объект в памяти, а не просто на равные значения:

main.py
Output
Click Run to see the output here.

Почти всегда нужен ==. Единственное место, где is действительно блестит, — проверка против None, True и False:

main.py
Output
Click Run to see the output here.

Соглашение сообщества жёстко: is None, не == None. То же для is True (хотя тебе это редко нужно).

Побитовые операторы (при первом прочтении можно пропустить)

У Python есть побитовые операторы — &, |, ^, ~, <<, >> — для работы с отдельными битами целого числа. Полезны в криптографии, низкоуровневом сетевом коде и некоторых алгоритмах. На первом заходе их можно спокойно игнорировать.

Оператор «морж» (:=)

В Python 3.8 добавили :=, который присваивает и возвращает значение в одном выражении. Удобен в условиях, где ты хочешь одновременно сохранить и проверить результат:

main.py
Output
Click Run to see the output here.

Без моржа пришлось бы вызвать len(numbers) дважды или добавить лишнюю строку. Вещь не обязательная; используй там, где она уменьшает повторение.

Шпаргалка по приоритету операторов

От самого сильного связывания к самому слабому, для операторов, которые ты реально используешь:

  1. ** — возведение в степень
  2. *, /, //, % — умножение и деление
  3. +, - — сложение и вычитание
  4. <, <=, >, >=, ==, != — сравнения
  5. not
  6. and
  7. or

Если есть сомнения — ставь скобки. Ясность бьёт хитрость.

Переходим к управлению потоком

С операторами в арсенале ты можешь писать условия. На следующей странице — if/elif/else, конструкция, позволяющая программе выбирать путь в зависимости от того, что сообщают операторы.

Часто задаваемые вопросы

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

Арифметические (+, -, *, /, //, %, **), сравнения (==, !=, <, <=, >, >=), логические (and, or, not), присваивания (=, +=, -=, …), принадлежности (in, not in) и идентичности (is, is not).

В чём разница между == и is в Python?

== проверяет, равны ли два значения. is проверяет, ссылаются ли две переменные на один и тот же объект в памяти. Для None, True и False используй is — это синглтоны. Для всего остального почти всегда нужен ==.

Что делает оператор % в Python?

Для чисел % — это модуло, возвращающий остаток от деления. 17 % 5 даст 2. Для строк это старый способ форматирования (вроде "hello %s" % name), но f-строки его в основном вытеснили.

Учитесь программировать с Coddy

НАЧАТЬ