Операторы в Python: что значат //, %, ** и другие знаки

Таблица всех операторов Python с примерами: что значат //, %, **, ==, and, in, is и «морж» :=.

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

Весь код запущен в Python 3.14, вывод в примерах настоящий.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 2806 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3460 экспертных мнений Подписаться на Телеграм-канал
Обложка: Операторы в Python: что значат //, %, ** и другие знаки

Оператор в Python это знак или слово, которое выполняет действие над значениями: + складывает, // делит нацело, % даёт остаток, ** возводит в степень, == сравнивает, а одиночный = записывает значение в переменную. Слова and, or, not, in и is тоже операторы, просто записаны буквами.

Ниже таблица всех знаков с примерами, разбор каждой группы и ошибки, на которых спотыкаются новички. Весь код проверен в Python 3.14, вывод в блоках настоящий. Собрали и курсы по Python для тех, кто хочет разобрать язык целиком. Если вы только знакомитесь с языком, начните с обзора «Язык Python: стоит ли учить», а запустить примеры у себя поможет инструкция «Как создать и запустить файл Python в VS Code».

CheckroiCheckroiПодборка курсов по Python571 курс • 50 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Что значит каждый знак в Python: таблица операторов

Рой разбирает операторы Python в редакторе кода

Сохраните таблицу как шпаргалку. В последнем столбце то, что напечатает print().

Оператор Что значит Пример Результат
+ сложение, склейка строк и списков 2 + 3 5
- вычитание, смена знака 10 - 4 6
* умножение, повтор строки "ab" * 3 ababab
/ обычное деление, всегда даёт дробное число 6 / 3 2.0
// деление нацело с округлением вниз 7 // 2 3
% остаток от деления 7 % 2 1
** возведение в степень 2 ** 10 1024
= присваивание x = 5 x хранит 5
+=, -=, *= и т. д. изменить переменную на месте x += 1 x стал 6
== равно 5 == 5.0 True
!= не равно 5 != 5 False
>, < больше, меньше 3 > 2 True
>=, <= больше или равно, меньше или равно 2 <= 2 True
and логическое И 3 and 4 4
or логическое ИЛИ 0 or "нет" нет
not логическое НЕ not 0 True
in, not in есть ли элемент в коллекции "py" in "python" True
is, is not один ли это объект в памяти x is None True или False
&, |, ^ побитовые И, ИЛИ, исключающее ИЛИ 5 & 3 1
~ побитовое НЕ ~5 -6
<<, >> сдвиг битов влево и вправо 1 << 4 16
:= «морж», присваивание внутри выражения (n := 3) > 2 True
@ умножение матриц (NumPy) a @ b матрица

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

Арифметические операторы: деление, остаток и степень

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

print(7 / 2, 7 // 2, 7 % 2, 2 ** 10)
print(6 / 3, type(6 / 3).__name__)
print(divmod(17, 5))
3.5 3 1 1024
2.0 float
(3, 2)

Одиночный слеш / всегда возвращает дробное число типа float, даже когда делится без остатка. Нужно целое, берите //. Функция divmod() отдаёт частное и остаток сразу парой.

Что значит // и % с отрицательными числами

Двойной слеш округляет вниз, а не отбрасывает дробную часть. На положительных числах разницы не видно, на отрицательных она есть:

print(-7 // 2, -7 % 2, 7 // -2, 7 % -2)
-4 1 -4 -1

Минус три с половиной округляется вниз до минус четырёх. Остаток % в Python всегда того же знака, что делитель, поэтому -7 % 2 даёт 1, а не -1. Так написано в описании числовых типов: результат // это частное, округлённое к минус бесконечности.

Степень ** и минус перед числом

Две вещи, которые ломают формулы:

print(-2 ** 2, (-2) ** 2)
print(2 ** 3 ** 2)
print(2 ** -1)
-4 4
512
0.5
  • -2 ** 2 равно -4: степень считается раньше минуса. Нужен квадрат отрицательного числа, ставьте скобки.
  • 2 ** 3 ** 2 считается справа налево: сначала 3 в квадрате, потом 2 в девятой.
  • Отрицательная степень даёт дробь.

Плюс и звёздочка для строк и списков

Плюс и звёздочка в питоне работают не только с числами:

print("ab" * 3, "py" + "thon", [0] * 3)
ababab python [0, 0, 0]

Склейка строк понадобится уже в первых проектах, например чтобы собрать текст запроса к нейросети, как в примерах GigaChat API на Python.

А вот строку с числом сложить нельзя, об этом в разделе ошибок.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

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

Главное правило: один знак = записывает, два знака == сравнивают. Перепутаете в условии, Python сам подскажет:

x = 5
if x = 5:
    print(x)
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

Сравнения возвращают True или False. Их можно писать цепочкой, как в математике:

x = 5
print(1 < x < 10, x == 5.0, x != 5)
print("apple" < "banana", "Z" < "a")
True True False
True True

Запись 1 < x < 10 равна 1 < x and x < 10, но x вычисляется один раз. Строки сравниваются по кодам символов, поэтому заглавная "Z" оказывается «меньше» строчной "a". Сравнения чаще всего живут в условиях циклов, подробнее в статье «Цикл while в Python».

Составное присваивание и оператор «морж»

Запись n += 5 короче, чем n = n + 5. Так же работают -=, *=, /=, //=, %= и **=:

n = 10
n += 5    # 15
n *= 2    # 30
n //= 3   # 10
print(n)
10

Оператор := появился в Python 3.8 и за форму получил прозвище «морж». Он присваивает значение прямо внутри выражения, чтобы не считать одно и то же дважды:

data = [3, 8, 1]
if (n := len(data)) > 2:
    print(f"элементов: {n}")
элементов: 3

Логические операторы and, or, not

В Python логика пишется словами, а не значками && и ||, как в C или JavaScript. Это одна из причин, почему Python советуют первым языком для новичков. Порядок такой: сначала not, потом and, последним or.

Неочевидная деталь: and и or возвращают не True или False, а один из операндов. Об этом прямо сказано в разделе о логических операциях:

print(0 or "по умолчанию", 3 and 4, None or [] or 0)
print(not 0, not "текст", not 1 == 2)
по умолчанию 4 0
True False True
  • or отдаёт первое «истинное» значение или последнее, если истинных нет. Отсюда приём name = user_input or "Гость".
  • and отдаёт первое «ложное» значение или последнее, если все истинны.
  • Ложными считаются 0, пустая строка, пустой список, None и False.

Второй операнд вычисляется, только если без него ответ неясен. В x != 0 and 10 / x > 1 деления на ноль не будет. Короткую запись «если, то, иначе» в одну строку разбирает статья «Тернарный оператор в Python».

Операторы in и is: принадлежность и тождество

in проверяет, есть ли элемент внутри коллекции:

print(3 in [1, 2, 3], "py" in "python", "k" in {"k": 1}, 1 in {"k": 1})
True True True False

У словаря in ищет среди ключей, а не значений, поэтому последняя проверка дала False.

is отвечает на другой вопрос: это один и тот же объект или два одинаковых?

a = [1, 2]
b = [1, 2]
c = a
print(a == b, a is b, a is c)
True False True

Списки a и b равны по содержимому, но это разные объекты. c это второе имя того же списка. Для сравнения значений нужен ==, а is оставьте для None: if result is None.

Побитовые операторы и операции с множествами

Знаки &, |, ^, ~, << и >> работают с двоичной записью целых чисел. В прикладном коде они встречаются редко: флаги, маски, сетевые протоколы. Постоянно с битами работает программист микроконтроллеров, хотя пишет он чаще на C.

print(bin(5), bin(3), bin(5 & 3))
print(5 & 3, 5 | 3, 5 ^ 3, ~5, 1 << 4, 256 >> 2)
0b101 0b11 0b1
1 7 6 -6 16 64

Сдвиг влево на 4 бита равен умножению на 16, сдвиг вправо на 2 бита делит нацело на 4.

Гораздо чаще те же знаки попадаются в работе с множествами и словарями:

s = {1, 2, 3}
t = {2, 3, 4}
print(s & t, s | t, s - t, s ^ t)
print({"a": 1} | {"b": 2})
{2, 3} {1, 2, 3, 4} {1} {1, 4}
{'a': 1, 'b': 2}
Знак С числами С множествами
& побитовое И пересечение
| побитовое ИЛИ объединение; у словарей слияние с Python 3.9
^ исключающее ИЛИ элементы, которые есть только в одном из множеств
- вычитание разность множеств
Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

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

Кубики со знаками операторов, сложенные по порядку

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

  1. Скобки ().
  2. Степень **.
  3. Унарные +x, -x, ~x.
  4. *, @, /, //, %.
  5. + и -.
  6. Сдвиги <<, >>, затем &, ^, |.
  7. Сравнения, in, is.
  8. not, потом and, потом or.
  9. Тернарный if…else, lambda и в самом конце :=.
print(2 + 3 * 4, (2 + 3) * 4, 10 / 3 * 3)
14 20 10.0

Операторы одного уровня считаются слева направо, кроме **. Совет из практики: если сами сомневаетесь в порядке, поставьте скобки. Коллега, который будет читать код, тоже сомневается, а лишние скобки ничего не стоят. Это частный случай принципа KISS: простой код лучше хитрого.

Частые ошибки с операторами

Рой нашёл ошибку в условии и доволен

Условие «равно одному из вариантов» всегда истинно

answer = "нет"
if answer == "да" or "ок":
    print("сработало")
сработало

Python читает это как (answer == "да") or "ок", а непустая строка "ок" всегда истинна.

Решение: if answer in ("да", "ок"):

Сложение строки с числом

print("5" + 5)
TypeError: can only concatenate str (not "int") to str

Python не превращает типы сам, в отличие от JavaScript. Решение: int("5") + 5 даёт 10, а "5" * 3 даёт строку 555. Почему языки ведут себя по-разному, объясняет статья про типизацию в программировании.

Почему 0,1 + 0,2 не равно 0,3 в питоне

print(0.1 + 0.2, 0.1 + 0.2 == 0.3)
0.30000000000000004 False

Дробные числа хранятся в двоичном виде с крошечной погрешностью, это разобрано в учебнике Python. Решение: сравнивать через math.isclose(0.1 + 0.2, 0.3), для денег брать модуль decimal. Та же погрешность вылезает при сумме длинного списка цен, приёмы есть в инструкции «Как суммировать список в Python».

is вместо == для чисел и строк

Проверка x is 1000 иногда даёт True, иногда False, и зависит это от того, как интерпретатор разместил объекты. Python 3.14 на такую строку выводит предупреждение SyntaxWarning: "is" with 'int' literal. Did you mean "=="?. Решение: значения сравнивать только через ==.

x++ из других языков

Инкремента ++ в Python нет, x++ даёт SyntaxError. Коварнее запись ++x: ошибки нет, это два унарных плюса, и x не меняется. Решение: x += 1.

+= меняет список у всех, кто на него ссылается

lst = [1]
alias = lst
lst += [2]
print(alias)
[1, 2]

У списка += дописывает элементы в тот же объект, поэтому изменился и alias. С кортежем то же действие создаёт новый объект, и старое имя остаётся с прежним значением. Это поведение описано в разделе о составном присваивании.

Где освоить Python системно

Операторы открывают почти любой учебник по Python. Дальше идут функции, классы, работа с файлами и библиотеками, и здесь удобнее учиться по программе, где задачи проверяет преподаватель, а не только интерпретатор.

Если думаете о работе с Python, посмотрите, как стать Python-разработчиком с нуля. Ниже подборка курсов, полный список собран в каталоге курсов по Python.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология161 200 ₽7125 ₽/мес.21 месяцОбзор курса
ДО Профессия Python-разработчик
Перейти на сайт курса
GeekBrainsGeekBrains149 001 ₽3167 ₽/мес.10 месяцевОбзор курса
Автоматизированное тестирование на Python
Перейти на сайт курса
SkillboxSkillbox118 666 ₽4108 ₽/мес.9 месяцевОбзор курса
Программирование на Python ПРО
Перейти на сайт курса
SkillboxSkillbox119 600 ₽ - 17 месяцевОбзор курса

Больше программ — в полном каталоге курсов по Python

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

Что значит // в питоне?

Деление нацело с округлением вниз: 7 // 2 даёт 3, а -7 // 2 даёт -4. Одиночный слеш / всегда возвращает дробное число, даже 6 / 3 равно 2.0.

Что значит % в Python?

Остаток от деления: 7 % 2 равно 1. Знак результата совпадает со знаком делителя, поэтому -7 % 2 тоже даёт 1.

Чем == отличается от is?

== сравнивает значения, is проверяет, один ли это объект в памяти. Два одинаковых списка равны по ==, но is для них даст False. Оператор is нужен в основном для проверки x is None.

Как написать «больше или равно» в питоне?

Знаком >=, а «меньше или равно» пишется <=. Сравнения можно ставить цепочкой, как в математике: 1 <= x <= 10.

В каком порядке Python выполняет операторы?

Сначала скобки, потом степень **, затем умножение и деление, сложение и вычитание, сравнения и в самом конце not, and, or. Поэтому 2 + 3 * 4 равно 14, а -2 ** 2 равно -4.

Есть ли в Python x++?

Нет, вместо инкремента пишут x += 1. Запись x++ вызывает SyntaxError, а ++x ошибки не даёт, но и значение не меняет.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!