Оператор в Python — это символ или ключевое слово, которое выполняет действие над одним или несколькими значениями: складывает числа, сравнивает объекты, проверяет условие. Значения, с которыми работает оператор, называют операндами. В 2 + 3 число 2 и число 3 — операнды, + — оператор.
Содержание
Операторы делятся на семь групп по типу действия: арифметические, сравнения, логические, присваивания, битовые, принадлежности и тождественности. Ниже — каждая группа с таблицей и рабочим кодом.
Группы операторов Python
| Группа | Примеры | Что делает |
|---|---|---|
| Арифметические | + - * / // % ** |
вычисления с числами |
| Сравнения | == != > < >= <= |
сравнивают значения, дают True/False |
| Логические | and or not |
комбинируют логические условия |
| Присваивания | = += -= *= /= |
записывают значение в переменную |
| Битовые | & \| ^ ~ << >> |
работают с числами на уровне бит |
| Принадлежности | in not in |
проверяют, есть ли элемент в последовательности |
| Тождественности | is is not |
проверяют, один ли это объект в памяти |
Арифметические операторы
Работают с числами, а + и * дополнительно определены для строк и списков (конкатенация и повтор).
| Оператор | Действие |
|---|---|
+ |
сложение |
- |
вычитание |
* |
умножение |
/ |
деление, всегда возвращает float |
// |
целочисленное деление (округление к минус бесконечности) |
% |
остаток от деления |
** |
возведение в степень |
a, b = 17, 5
print(a + b) # 22
print(a - b) # 12
print(a * b) # 85
print(a / b) # 3.4
print(a // b) # 3
print(a % b) # 2
print(a ** b) # 1419857
/ и // для отрицательных чисел ведут себя не так, как в C или Java: // округляет результат к минус бесконечности, а не к нулю.
print(-7 / 2) # -3.5
print(-7 // 2) # -4, а не -3
Операторы сравнения
Результат сравнения — всегда True или False.
| Оператор | Проверяет |
|---|---|
== |
равенство значений |
!= |
неравенство значений |
> |
левый операнд больше |
< |
левый операнд меньше |
>= |
больше или равно |
<= |
меньше или равно |
x, y = 10, 20
print(x == y) # False
print(x != y) # True
print(x < y) # True
print("apple" < "banana") # True, сравнение строк идет лексикографически
В Python можно записать цепочку сравнений подряд, и она читается как последовательность условий, соединенных через and:
n = 7
print(1 < n < 10) # True, эквивалентно (1 < n) and (n < 10)
Логические операторы
Всего три: and, or, not. Работают со значениями, которые Python приводит к истине или лжи, а не только с явными True/False.
and и or работают по короткому замыканию: and останавливается на первом ложном операнде, or — на первом истинном, и правая часть выражения может вообще не выполниться.
def check(name):
print(f"проверяю {name}")
return False
result = check("a") and check("b")
В консоли появится только одна строка:
проверяю a
Вызов check("b") не произойдет: and уже получил False от первого операнда и вернул его без дальнейших вычислений.
Операторы присваивания
Простое присваивание = записывает значение в переменную. Составные операторы (+=, -= и другие) сокращают запись «переменная = переменная действие значение».
| Оператор | Эквивалент |
|---|---|
= |
x = значение |
+= |
x = x + значение |
-= |
x = x - значение |
*= |
x = x * значение |
/= |
x = x / значение |
//= |
x = x // значение |
%= |
x = x % значение |
**= |
x = x ** значение |
counter = 10
counter += 5 # 15
counter *= 2 # 30
counter //= 4 # 7, потому что 30 // 4 = 7
print(counter) # 7
Отдельно стоит оператор := (walrus, «морж») — он появился в Python 3.8 и делает не то же самое, что =. Это не оператор-инструкция, а выражение: он присваивает значение и одновременно возвращает его, поэтому его можно использовать внутри условия:
data = [1, 2, 3, 4, 5]
if (n := len(data)) > 3:
print(f"элементов: {n}") # элементов: 5
Без := пришлось бы сначала посчитать len(data) отдельной строкой, а потом использовать переменную в if.
Битовые операторы
Работают только с целыми числами: переводят их во внутреннее двоичное представление и обрабатывают побитово.
| Оператор | Действие |
|---|---|
& |
побитовое И |
\| |
побитовое ИЛИ |
^ |
побитовое исключающее ИЛИ (XOR) |
~ |
побитовое отрицание |
<< |
сдвиг влево |
>> |
сдвиг вправо |
a, b = 12, 10 # 1100 и 1010 в двоичном виде
print(a & b) # 8 (1000)
print(a | b) # 14 (1110)
print(a ^ b) # 6 (0110)
print(~a) # -13, дополнение до двух: ~x равно -x-1
print(a << 2) # 48, сдвиг влево на 2 равен умножению на 4
print(a >> 2) # 3, сдвиг вправо на 2 равен целочисленному делению на 4
Начинающему битовые операторы редко нужны в прикладном коде — они актуальны для работы с флагами, масками и низкоуровневой оптимизацией.
Операторы принадлежности: in и not in
Проверяют, есть ли значение в последовательности — списке, кортеже, строке, множестве или словаре (по ключам).
fruits = ["apple", "banana", "cherry"]
print("banana" in fruits) # True
print("mango" in fruits) # False
print("mango" not in fruits) # True
print("an" in "banana") # True, in работает и как проверка подстроки
Тождественность: is — и чем это отличается от ==
Здесь легко перепутать два разных вопроса. == спрашивает «одинаковые ли значения», is спрашивает «один ли это объект в памяти». Для изменяемых объектов разница видна сразу:
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a == b) # True: значения списков совпадают
print(a is b) # False: это два разных объекта
print(a is c) # True: c ссылается на тот же объект, что и a
Частая ошибка новичков — сравнивать числа через is вместо ==, потому что на маленьких значениях это иногда «работает». CPython кеширует некоторые небольшие целые числа, и для них is может случайно вернуть True, но это деталь конкретной реализации интерпретатора, а не гарантия языка. Она зависит от версии и точного места в коде, поэтому в фактчек этой статьи вынесены только общие рамки поведения, а не конкретные числа для каждой версии. Практический вывод один: для сравнения значений всегда используйте ==, а is — только там, где действительно нужно проверить тождество объекта, например if value is None.
is not работает симметрично: возвращает True, если это разные объекты.
Приоритет операторов
Когда в выражении несколько операторов, Python выполняет их не слева направо вслепую, а по приоритету — как в математике со скобками.
| Приоритет | Операторы |
|---|---|
| высокий | () |
** |
|
унарные +x -x ~x |
|
* / // % |
|
+ - |
|
<< >> |
|
& |
|
^ |
|
\| |
|
сравнения: == != < > <= >= is in |
|
not |
|
| низкий | and, or |
result = 2 + 3 * 4 ** 2
print(result) # 50: сначала 4**2=16, потом 3*16=48, потом 2+48=50
Операторы одного уровня приоритета выполняются слева направо. Если порядок не очевиден — надежнее поставить скобки явно, чем полагаться на память таблицы приоритетов.
Выводы
- Оператор — символ или слово, выполняющее действие над операндами; в Python семь групп операторов.
/всегда дает float,//— целочисленное деление к минус бесконечности, а не к нулю.and/orработают по короткому замыканию и могут не вычислить правый операнд.==сравнивает значения,is— тождество объекта в памяти; для чисел и строк по умолчанию используйте==.:=(Python 3.8+) — это выражение присваивания, а не замена обычному=.
Где применяется / связь с практикой
Операторы — это база, без которой не читается ни один чужой код на Python и не пишется свой: условия в if, фильтры в списковых включениях, сравнения в циклах — везде работают правила из этой статьи. Дальше идут более сложные темы: срезы, распаковка, операторные перегрузки в собственных классах.
Освойте тему на практике
Если разбираетесь с Python с нуля и хотите пройти материал системно, а не по разрозненным статьям, посмотрите курс Python-разработчик — там операторы и типы данных разбирают в первых модулях с практикой на реальных задачах.
Освойте тему на практике
Проверить формат подачи и предметно задать вопросы преподавателю можно на открытых уроках Otus — они бесплатные и идут регулярно по разным направлениям.
FAQ
Чем / отличается от // для отрицательных чисел?
/ всегда возвращает точное значение с плавающей точкой: -7 / 2 равно -3.5. // округляет результат вниз, к минус бесконечности, а не к нулю: -7 // 2 равно -4, а не -3.
Можно ли добавить в Python свой оператор или изменить поведение существующего?
Новый символ-оператор добавить нельзя, но можно переопределить поведение существующих операторов для своего класса через специальные методы, например __add__ для + или __eq__ для ==. Это отдельная тема (перегрузка операторов), выходящая за рамки базового синтаксиса.
Работают ли операторы сравнения со списками и кортежами?
Да. Python сравнивает последовательности поэлементно слева направо, как строки: [1, 2, 3] < [1, 2, 4] дает True, потому что сравнение доходит до третьего элемента, и там 3 меньше 4.



