Операторы — это просто символы для действий
Оператор — это символ (или короткое ключевое слово), который говорит Python что-то сделать с одним или двумя значениями: сложить, сравнить, проверить, содержит ли одно другое. Несколько ты уже знаешь из базовой математики; у Python есть ещё пара для логики, вхождения и идентичности.
Пройдёмся по основным категориям по очереди.
Арифметические операторы
Стандартный набор плюс пара специфично-питоновских:
Два пункта из этого списка легко забыть:
/возвращает float даже когда оба операнда — целые.10 / 2даст тебе5.0. Для целочисленного деления —//.%— это модуло.n % 2 == 0— самый чистый способ проверить, чётное лиn.
Python следует стандартному математическому приоритету: ** связывает сильнее * и /, которые сильнее + и -. Скобки перекрывают всё:
Если есть малейшее сомнение — щедро ставь скобки. Они ничего не стоят и делают намерение очевидным.
Операторы сравнения
Шесть сравнений, каждое возвращает булев:
Python разрешает цепочки сравнений — это необычно и полезно:
Читается как «age не меньше 18 и меньше 65». Под капотом эквивалентно 18 <= age and age < 65, но внешне ближе к математической записи.
Логические операторы
Записываются английскими словами, а не символами:
Два момента, которые стоит знать:
Короткое замыкание. and останавливается на первом falsy значении; or — на первом truthy. Правая сторона вообще не вычисляется, если левая уже решила ответ. Это позволяет безопасно защищаться от ошибок:
and/or возвращают значение, а не всегда True/False. Они возвращают операнд, решивший результат:
В реальном коде встретишь name = user_input or "anonymous" — это паттерн значения по умолчанию, построенный на этом поведении.
Операторы присваивания
= присваивает. Составные формы совмещают операцию с присваиванием:
Составные формы работают и со строками (s += "more"), и со списками (lst += [4, 5]). Они не быстрее полной формы; они просто короче.
Принадлежность: in и not in
Проверяет, есть ли значение внутри контейнера:
in работает на любом итерируемом — списках, кортежах, множествах, строках, словарях и так далее. Для больших проверок in на списке — O(n); in на множестве или словаре — O(1). Это важно, когда ты проверяешь принадлежность много раз.
Идентичность: is и is not
is проверяет, указывают ли две переменные на один и тот же объект в памяти, а не просто на равные значения:
Почти всегда нужен ==. Единственное место, где is действительно блестит, — проверка против None, True и False:
Соглашение сообщества жёстко: is None, не == None. То же для is True (хотя тебе это редко нужно).
Побитовые операторы (при первом прочтении можно пропустить)
У Python есть побитовые операторы — &, |, ^, ~, <<, >> — для работы с отдельными битами целого числа. Полезны в криптографии, низкоуровневом сетевом коде и некоторых алгоритмах. На первом заходе их можно спокойно игнорировать.
Оператор «морж» (:=)
В Python 3.8 добавили :=, который присваивает и возвращает значение в одном выражении. Удобен в условиях, где ты хочешь одновременно сохранить и проверить результат:
Без моржа пришлось бы вызвать len(numbers) дважды или добавить лишнюю строку. Вещь не обязательная; используй там, где она уменьшает повторение.
Шпаргалка по приоритету операторов
От самого сильного связывания к самому слабому, для операторов, которые ты реально используешь:
**— возведение в степень*,/,//,%— умножение и деление+,-— сложение и вычитание<,<=,>,>=,==,!=— сравненияnotandor
Если есть сомнения — ставь скобки. Ясность бьёт хитрость.
Переходим к управлению потоком
С операторами в арсенале ты можешь писать условия. На следующей странице — 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-строки его в основном вытеснили.