logo
Ещё

Операторы Python

Основа практически любого языка программирования – это выражения, которые состоят из операндов и операторов. Python имеет операторы на все случаи жизни: для математических вычислений, для сравнений и логических конструкций, для работы с битами и так далее. А если вам не хватает функционала оператора – вы всегда можете написать свой с помощью перегрузки.

Подробнее об операторах

Выражения в языках программирования состоят из операторов (что делаем) и операндов (чем оперируем). Например: в выражении «x = 5» x и 5 являются операндами, = – оператором, который присваивает то, что стоит справа от него, тому, что стоит слева от него. В одной строке может содержаться несколько операторов:

x = a / b

, в этом случае операторы выполняются последовательно, согласно приоритету операторов – сначала выполняется «/», затем выполняется «=». О приоритетах поговорим после того, как разберем все операторы.

Небольшая заметка: подавляющее большинство операторов имеют 2 операнда (слева и справа от себя), исключениями являются тернарный оператор (он имеет 3 операнда) и not/битовый not (имеет 1 операнд).

Арифметические операторы и операторы присваивания в Python

Начнем с самого простого – того, чем вы будете пользоваться с первых минут использования языка:

Оператор

Форма

Описание

Пример

Результат

Присваивание

=

Присваивает значение справа от себя переменной слева от себя

x = 5

Переменная «x» хранит значение «5»

Сложение (конкатенация)

+

Складывает 2 операнда

4 + 8

12

Вычитание

-

Вычитает правый операнд из левого

4 - 8

-4

Умножение

*

Умножает 2 операнда

4 * 8

32

Деление

/

Делит левый операнд на правый

4 / 8

0.5

Целочисленное деление

//

Делит левый операнд на правый и отбрасывает дробную часть

4 // 8

0

Модуль

%

Делит левый операнд на правый и отбрасывает целую часть

4 % 8

4 (4/8 = 0 – целая часть, 4 – остаток от деления)

Возведение в степень

**

Возводит левый операнд в степень, равную правому операнду

4 ** 8

65 536

Заметка 1: сложение в арифметическом смысле доступно для чисел, но «+» используется шире – для списков, строк и других iterable объектов знак «+» используется как конкатенация, то есть – соединение двух объектов. Если вы создадите 2 списка: list1 = [0,1] и list2 = [2,3], после чего напишете list3 = list1 + list2, то в list3 будет храниться новый список – [0,1,2,3].


Заметка 2: модуль (%) в Python работает не так, как в других языках программирования, когда дело касается отрицательных чисел. Подробности – здесь.

Заметка 3: для всех арифметических и битовых операций существуют шорткаты – +=, -=, *= и так далее. Шорткат объединяет в себе присваивание и арифметический/битовый оператор, он удобен, когда нужно модифицировать значение переменной: x = x + 5 можно записать как x += 5.

Операторы сравнения и логические операторы в Python

Их часто используют вместе, поэтому логично объединить их в одном разделе. И те, и те возвращают True или False по результатам вычисления. Сравнение:

Оператор

Форма

Описание

Пример

Результат

Равенство

==

True, если операнды равны, и False в противном случае

5 == 5

True

Неравенство

!=

True, если операнды не равны, и False в противном случае

5 != 5

False

Больше

True, если левый операнд больше правого, и False в противном случае

5 > 8

False

Меньше

True, если левый операнд меньше правого, и False в противном случае

5 < 8

True

Больше или равно

>=

True, если операнды равны или левый больше правого, и False в противном случае

5 >= 5

True

Меньше или равно

<=

True, если операнды равны или левый меньше правого, и False в противном случае

5 <= 8

True

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

Оператор

Форма

Описание

Пример

Результат

И

and

Возвращает True, если оба операнда равны True, и False в противном случае

True and False

False

ИЛИ

or

Возвращает True, если хотя бы один из операндов равен True, и False, если оба операнда – False

True or False

True

НЕ

not

Возвращает False, если операнд – True, и True, если операнд – False. Унарный оператор – имеет только 1 операнд

not True

False

Сравнение и логические операторы практически всегда используются при ветвлении, то есть в конструкциях if. Например, если нам нужно понять, входит ли целочисленная переменная в диапазон от 3 до 6, то мы пишем:


if x > 2 and x < 7

Тернарный оператор

Конструкция if-then-else используется часто – настолько часто, что в Python ввели ее упрощенную форму под названием «тернарный оператор». В его основе лежит выражение – оно обычно составляется из логических операторов и операторов сравнения. Форма тернарного оператора:

[если Истина] if [выражение] else [если Ложь]


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

Проверяют либо вхождение значения в объект, либо тождественность объектов:

Оператор

Форма

Описание

Пример

Результат

«Содержит»

in

Проверяет, содержит ли объект, расположенный справа, элемент, расположенный слева

2 in [1,2,3]

True

«Не содержит»

not in

То же, что in, только с логическим отрицанием

4 in [1,2,3]

True

«Является»

is

Проверяет 2 объекта и возвращает True, если оба имеют одинаковое значение и находятся в одном участке памяти

“sravni” is “sravni”

True (строки с одинаковым содержимым всегда содержатся в одном и том же участке памяти)

«Не является»

is not

Проверяет 2 объекта и возвращает False, если оба имеют одинаковое значение и находятся в одном участке памяти

“sravni” is “sravni”

False

Битовые операторы в Python

Эти операторы вам, скорее всего, никогда в жизни не пригодятся – они нужны для операций со значениями на уровне бит. И все же:

Оператор

Форма

Описание

Пример и результат

Побитовое И

&

Сравнивает биты двух чисел на одинаковых разрядах, если оба бита – 1, то в результирующее число на тот же разряд ставится 1, если любой бит – 0, то на тот же разряд результата ставится 0

a = 5 # 0101

b = 3 # 0011

result = a & b # 0001

print(result) # 1

Побитовое ИЛИ

|

Сравнивает биты двух чисел на одинаковых разрядах, если хотя бы один бит – 1, то в результирующее число на тот же разряд ставится 1, если оба бита – 0, то на тот же разряд результата ставится 0

a = 5 # 0101

b = 3 # 0011

result = a | b # 0111

print(result) # 7

Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ

^

Сравнивает биты двух чисел на одинаковых разрядах, если оба бита – 1 или 0, то в результирующее число на тот же разряд ставится 0, если же один из бит равен единице, а второй – нулю, то на тот же разряд результата ставится 1

a = 5 # 0101

b = 3 # 0011

result = a ^ b # 0110

print(result) # 6

Побитовое НЕ

~

Инвертирует биты – 0 становится 1, 1 становится 0. Унарный оператор

a = 5 # 0101

result = ~a # 1010 (в двоичном представлении с учетом знака)

print(result) # -6

Сдвиг влево

<< 

Сдвигает все биты левого операнда влево на количество позиций, равное правому операнду

a = 5 # 0101

result = a << 1 # 1010

print(result) # 10

Сдвиг вправо

>> 

Сдвигает все биты левого операнда вправо на количество позиций, равное правому операнду. «Не вместившиеся» биты отбрасываются

a = 5 # 0101

result = a >> 1 # 0010

print(result) # 2

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

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

  1. Круглые скобки: «()».
  2. Возведение в степень: «**».
  3. Побитовое НЕ: «~».
  4. Умножение и деление: «*, /, //, %».
  5. Сложение и вычитание: «+, -».
  6. Сдвиг влево и вправо: «<<, >>».
  7. Побитовое И: «&».
  8. Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ: «^».
  9. Побитовое ИЛИ: «|».
  10. Все операторы сравнения, принадлежности и тождественности.
  11. Логическое НЕ: «not».
  12. Логическое И: «and».
  13. Логическое ИЛИ: «or».

Последним выполняется присваивание. Если в коде встречаются шорткаты присваивания – язык раскладывает их в «обычную форму», после чего исполняет операторы отдельно.

Перегрузка операторов и их функции

Перегрузка операторов – это когда мы для определенных классов и их объектов задаем особое поведение при использовании операторов. Например, у нас есть класс, представляющий вектор, и мы хотим, чтобы этот класс умел пользоваться оператором «+» – то есть чтобы мы могли написать «вектор1 + вектор2» и получить сумму векторов. Кроме того, было бы неплохо определить поведение объекта класса «Вектор» при его передаче в функцию str(). Как это будет выглядеть в коде:

class Vector:

def __init__(self, x, y):

self.x = x

self.y = y

def __add__(self, other):

return Vector(self.x + other.x, self.y + other.y)

def __str__(self):

return f"Vector({self.x}, {self.y})"

# Пример использования

v1 = Vector(2, 3)

v2 = Vector(4, 5)

v3 = v1 + v2

print(v3) # Вывод: Vector(6, 8)

Детальный разбор перегрузки можно найти в разделе про операторы в официальный документации.

Наконец, операторы можно импортировать как функции – в этом случае вы сможете и пользоваться ими, и переопределять функции при необходимости. Это тоже расписано в документации.

Где учить Python – курсы на Сравни

Обычные операторы вы можете изучить самостоятельно, а вот с перегрузкой уже будет сложнее – нужно понимать ООП в Python. Научиться всем приемам работы с операторами и получить первую работу можно после прохождения курсов:

  • «Python-разработчик» от ProductStar. Длительность – 10 месяцев.
  • «Python-разработчик» от Яндекс.Практикум. Длительность – 10 месяцев.
  • «Бэкенд-разработчик на Python» от SF Education. Длительность – 3 месяца.
  • «Python-разработчик» от Хекслет. Длительность – 10 месяцев.
  • «Python-разработчик» от Skypro. Длительность – 12 месяцев.

Вывод

Тезисно:

  • Оператор – это инструкция, которая что-то делает с операндами и возвращает результат.
  • В Python есть операторы для арифметики и битовых операций, сравнения и булевой логики, принадлежности и тождественности.
  • Для классов и объектов можно создать свое значение операторов – это называется перегрузкой.