W3docs

Введение в операторы Python

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

Операторы — это символы и ключевые слова, которые указывают Python, какое действие выполнить над одним или несколькими значениями. Каждое осмысленное выражение Python — от x + 1 до if age >= 18 — опирается как минимум на один оператор. Python делит операторы на семь категорий: арифметические, сравнения, присваивания, логические, тождества, принадлежности и побитовые. В этой главе рассматривается каждая категория, показывается, когда её применять, и подчёркиваются распространённые подводные камни.

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

Арифметические операторы выполняют математические вычисления. Python предоставляет семь из них:

ОператорНазваниеПримерРезультат
+Сложение17 + 522
-Вычитание17 - 512
*Умножение17 * 585
/Деление17 / 53.4
%Остаток от деления17 % 52
**Возведение в степень2 ** 8256
//Целочисленное деление17 // 53

Два оператора заслуживают особого внимания:

  • / всегда возвращает float в Python 3, даже при делении двух целых чисел (4 / 2 возвращает 2.0, а не 2).
  • // (целочисленное деление) округляет результат в сторону минус бесконечности, а не к нулю. Поэтому -7 // 2 равно -4, а не -3.
python— editable, runs on the server

Типичное применение: проверка чётности

Оператор остатка от деления (%) — стандартный способ проверки делимости:

number = 42
if number % 2 == 0:
    print("even")
else:
    print("odd")
# Output: even

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

Операторы сравнения сравнивают два значения и всегда возвращают True или False. Они используются в условиях, циклах while и везде, где нужен логический результат.

ОператорЗначениеПримерРезультат
==Равно5 == 5True
!=Не равно5 != 3True
>Больше5 > 3True
<Меньше5 < 3False
>=Больше или равно5 >= 5True
<=Меньше или равно5 <= 4False
python— editable, runs on the server

Цепочки сравнений

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

x = 7
print(1 < x < 10)   # True  — equivalent to (1 < x) and (x < 10)
print(0 < x < 5)    # False

Подводный камень: == и =

= — это оператор присваивания; == проверяет равенство. Использование = внутри условия приводит к SyntaxError в Python (в отличие от некоторых других языков, где это молча выполняет присваивание).

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

Операторы присваивания сохраняют значения в переменных. Составные формы (+=, -=, …) объединяют арифметическую или побитовую операцию с присваиванием, делая код более лаконичным.

ОператорЭквивалентПример
=x = 10
+=x = x + nx += 3
-=x = x - nx -= 3
*=x = x * nx *= 3
/=x = x / nx /= 3
//=x = x // nx //= 3
%=x = x % nx %= 3
**=x = x ** nx **= 3
&=x = x & nx &= 0b1111
|=x = x | nx |= 0b1000
^=x = x ^ nx ^= 0b0101
<<=x = x << nx <<= 1
>>=x = x >> nx >>= 1
python— editable, runs on the server

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

Оператор «морж» присваивает значение внутри выражения. Он полезен, когда нужно одновременно вычислить и сохранить результат, не записывая выражение дважды:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Without walrus: compute length twice
if len(numbers) > 5:
    print(f"Long list: {len(numbers)} items")

# With walrus: assign once, use in condition and body
if (n := len(numbers)) > 5:
    print(f"Long list: {n} items")
# Output: Long list: 10 items

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

Логические операторы объединяют или инвертируют логические выражения. Python использует английские ключевые слова вместо символов (&&, ||, !).

ОператорЗначениеПримерРезультат
andИстинно, если обе части истинныTrue and FalseFalse
orИстинно, если хотя бы одна часть истиннаTrue or FalseTrue
notИнвертирует логическое значениеnot TrueFalse
python— editable, runs on the server

Ленивые вычисления

Python вычисляет and и or лениво (слева направо) и останавливается, как только результат определён:

  • False and <anything> — правая часть никогда не вычисляется.
  • True or <anything> — правая часть никогда не вычисляется.

Это важно, когда правая часть имеет побочный эффект или может вызвать ошибку:

user_input = ""
name = user_input or "Anonymous"
print(name)   # Anonymous  (empty string is falsy, so "Anonymous" is returned)

Истинные и ложные значения

Логические операторы работают с любыми значениями, а не только с True/False. Python считает 0, "", None, [], {} и () ложными; всё остальное — истинным.

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

Операторы тождества

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

ОператорЗначение
isTrue, если обе переменные ссылаются на один объект
is notTrue, если они ссылаются на разные объекты
python— editable, runs on the server

Когда использовать is вместо ==

Используйте is только тогда, когда намеренно хотите проверить тождество объектов — чаще всего при сравнении с синглтонами:

value = None
if value is None:       # correct idiom
    print("No value provided")

# Never do: if value == None — works but is considered bad style

Python кэширует маленькие целые числа (обычно от -5 до 256) и интернированные строки, поэтому a is b может возвращать True для двух независимо созданных маленьких целых чисел. Никогда не полагайтесь на это поведение для целых чисел или строк — используйте == для проверки равенства значений.

Операторы принадлежности

Операторы принадлежности проверяют, существует ли значение внутри последовательности (списка, кортежа, строки, множества или словаря).

ОператорЗначение
inTrue, если значение найдено в последовательности
not inTrue, если значение не найдено
python— editable, runs on the server

Замечание о производительности

Для списков и кортежей in проверяет каждый элемент последовательно (O(n)). Для множеств и ключей словарей in использует хеш-таблицу и выполняется за постоянное время (O(1)). Предпочитайте set, когда нужно многократно проверять принадлежность в большой коллекции.

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

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

ОператорНазваниеПримерРезультатПримечания
&AND5 & 31Бит равен 1, только если оба бита равны 1
|OR5 | 37Бит равен 1, если хотя бы один бит равен 1
^XOR5 ^ 36Бит равен 1, если биты различаются
~NOT~5-6Инвертирует все биты; результат равен -(n+1)
<<Сдвиг влево5 << 110Сдвигает биты влево (умножение на 2)
>>Сдвиг вправо20 >> 25Сдвигает биты вправо (деление на 2)
python— editable, runs on the server

Зачем нужны побитовые операторы

В большинстве повседневного кода на Python побитовые операторы используются редко, однако они часто встречаются в:

  • Флагах и разрешениях — объединение битовых масок для представления нескольких параметров в одном целом числе.
  • Криптографии и хешировании — XOR является базовым строительным блоком.
  • Эффективных вычисленияхn << 1 быстрее, чем n * 2, в критических по производительности циклах.
  • Работе с бинарными протоколами — разбор сетевых пакетов или заголовков файлов.

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

Когда выражение содержит несколько операторов, Python вычисляет их в фиксированном порядке (наивысший приоритет — первым):

ПриоритетОператоры
1 (наивысший)**
2+x, -x, ~x (унарные)
3*, /, //, %
4+, -
5<<, >>
6&
7^
8|
9==, !=, <, >, <=, >=, is, is not, in, not in
10not
11and
12 (наименьший)or
# Multiplication before addition (standard math rules apply)
print(2 + 3 * 4)      # 14, not 20

# Use parentheses to override
print((2 + 3) * 4)    # 20

# ** is right-associative: 2 ** 3 ** 2 = 2 ** (3**2) = 2**9
print(2 ** 3 ** 2)    # 512, not 64

# Comparisons before logical operators
print(2 + 3 > 4 and 10 % 3 == 1)  # True and True → True

При сомнениях используйте скобки. Они делают приоритет явным и улучшают читаемость.

Итоги

КатегорияОператорыОсновное применение
Арифметические+ - * / % ** //Математические вычисления
Сравнения== != > < >= <=Условия, фильтрация
Присваивания= += -= *= /= //= %= **= &= |= ^= <<= >>=Сохранение и обновление переменных
Логическиеand or notОбъединение логических условий
Тождестваis is notПроверка синглтонов (например, is None)
Принадлежностиin not inПоиск в последовательностях и множествах
Побитовые& | ^ ~ << >>Двоичные флаги, низкоуровневые данные

По связанным темам смотрите Переменные Python, Python If...Else и Типы данных Python.

Практика

Практика
Which of the following categories does Python operators fall into?
Which of the following categories does Python operators fall into?
Was this page helpful?