Введение в операторы Python
Все типы операторов Python — арифметические, сравнения, присваивания, логические, побитовые, тождества и принадлежности — с примерами и правилами приоритета.
Операторы — это символы и ключевые слова, которые указывают Python, какое действие выполнить над одним или несколькими значениями. Каждое осмысленное выражение Python — от x + 1 до if age >= 18 — опирается как минимум на один оператор. Python делит операторы на семь категорий: арифметические, сравнения, присваивания, логические, тождества, принадлежности и побитовые. В этой главе рассматривается каждая категория, показывается, когда её применять, и подчёркиваются распространённые подводные камни.
Арифметические операторы
Арифметические операторы выполняют математические вычисления. Python предоставляет семь из них:
| Оператор | Название | Пример | Результат |
|---|---|---|---|
+ | Сложение | 17 + 5 | 22 |
- | Вычитание | 17 - 5 | 12 |
* | Умножение | 17 * 5 | 85 |
/ | Деление | 17 / 5 | 3.4 |
% | Остаток от деления | 17 % 5 | 2 |
** | Возведение в степень | 2 ** 8 | 256 |
// | Целочисленное деление | 17 // 5 | 3 |
Два оператора заслуживают особого внимания:
/всегда возвращаетfloatв Python 3, даже при делении двух целых чисел (4 / 2возвращает2.0, а не2).//(целочисленное деление) округляет результат в сторону минус бесконечности, а не к нулю. Поэтому-7 // 2равно-4, а не-3.
Типичное применение: проверка чётности
Оператор остатка от деления (%) — стандартный способ проверки делимости:
number = 42
if number % 2 == 0:
print("even")
else:
print("odd")
# Output: evenОператоры сравнения
Операторы сравнения сравнивают два значения и всегда возвращают True или False. Они используются в условиях, циклах while и везде, где нужен логический результат.
| Оператор | Значение | Пример | Результат |
|---|---|---|---|
== | Равно | 5 == 5 | True |
!= | Не равно | 5 != 3 | True |
> | Больше | 5 > 3 | True |
< | Меньше | 5 < 3 | False |
>= | Больше или равно | 5 >= 5 | True |
<= | Меньше или равно | 5 <= 4 | False |
Цепочки сравнений
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 + n | x += 3 |
-= | x = x - n | x -= 3 |
*= | x = x * n | x *= 3 |
/= | x = x / n | x /= 3 |
//= | x = x // n | x //= 3 |
%= | x = x % n | x %= 3 |
**= | x = x ** n | x **= 3 |
&= | x = x & n | x &= 0b1111 |
|= | x = x | n | x |= 0b1000 |
^= | x = x ^ n | x ^= 0b0101 |
<<= | x = x << n | x <<= 1 |
>>= | x = x >> n | x >>= 1 |
Оператор «морж» := (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 False | False |
or | Истинно, если хотя бы одна часть истинна | True or False | True |
not | Инвертирует логическое значение | not True | False |
Ленивые вычисления
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.
Операторы тождества
Операторы тождества проверяют, указывают ли две переменные на один и тот же объект в памяти, а не просто содержат ли они равные значения.
| Оператор | Значение |
|---|---|
is | True, если обе переменные ссылаются на один объект |
is not | True, если они ссылаются на разные объекты |
Когда использовать is вместо ==
Используйте is только тогда, когда намеренно хотите проверить тождество объектов — чаще всего при сравнении с синглтонами:
value = None
if value is None: # correct idiom
print("No value provided")
# Never do: if value == None — works but is considered bad stylePython кэширует маленькие целые числа (обычно от -5 до 256) и интернированные строки, поэтому a is b может возвращать True для двух независимо созданных маленьких целых чисел. Никогда не полагайтесь на это поведение для целых чисел или строк — используйте == для проверки равенства значений.
Операторы принадлежности
Операторы принадлежности проверяют, существует ли значение внутри последовательности (списка, кортежа, строки, множества или словаря).
| Оператор | Значение |
|---|---|
in | True, если значение найдено в последовательности |
not in | True, если значение не найдено |
Замечание о производительности
Для списков и кортежей in проверяет каждый элемент последовательно (O(n)). Для множеств и ключей словарей in использует хеш-таблицу и выполняется за постоянное время (O(1)). Предпочитайте set, когда нужно многократно проверять принадлежность в большой коллекции.
Побитовые операторы
Побитовые операторы работают с двоичным представлением целых чисел, манипулируя отдельными битами.
| Оператор | Название | Пример | Результат | Примечания |
|---|---|---|---|---|
& | AND | 5 & 3 | 1 | Бит равен 1, только если оба бита равны 1 |
| | OR | 5 | 3 | 7 | Бит равен 1, если хотя бы один бит равен 1 |
^ | XOR | 5 ^ 3 | 6 | Бит равен 1, если биты различаются |
~ | NOT | ~5 | -6 | Инвертирует все биты; результат равен -(n+1) |
<< | Сдвиг влево | 5 << 1 | 10 | Сдвигает биты влево (умножение на 2) |
>> | Сдвиг вправо | 20 >> 2 | 5 | Сдвигает биты вправо (деление на 2) |
Зачем нужны побитовые операторы
В большинстве повседневного кода на 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 |
| 10 | not |
| 11 | and |
| 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.