Операторы в Python: полный список и примеры использования

Раздел: Основы Python -> Операторы

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

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

Как выполнять арифметические операции?

Основные арифметические операторы: + (сложение), - (вычитание), * (умножение), / (деление с плавающей точкой), // (целочисленное деление), % (остаток от деления), ** (возведение в степень).

a = 10
b = 3
print(a + b)   # 13
print(a - b)   # 7
print(a * b)   # 30
print(a / b)   # 3.3333333333333335
print(a // b)  # 3
print(a % b)   # 1
print(a ** b)  # 1000

значение операторов в python (значение операторов в python)

Как использовать операторы через функции модуля operator?

Модуль operator предоставляет функции, соответствующие операторам. Это удобно для передачи операций как аргументов.

import operator
print(operator.add(10, 5))   # 15
print(operator.floordiv(10, 3)) # 3
print(operator.pow(2, 3))    # 8

типы операторов python (типы операторов в python)

Проблемы: при делении на ноль возникает ZeroDivisionError. Рекомендуется проверять делитель или обрабатывать исключение.

try:
    result = 10 / 0
except ZeroDivisionError:
    print("Деление на ноль невозможно")

определение операторов python (определение операторов в python)

Как сравнивать значения?

Операторы сравнения: == (равно), != (не равно), >, <, >=, <=. Результат всегда bool.

x = 5
y = 10
print(x == y)  # False
print(x != y)  # True
print(x < y)   # True
print(x >= 5)  # True

типы операций в python (типы операций в python)

Как использовать цепочки сравнений?

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

a = 7
print(5 < a < 10)  # True (равносильно 5 < a and a < 10)
print(0 < a <= 5)  # False

какие операторы используются в python (какие операторы используются в python?)

Ошибки: сравнение float может давать неожиданные результаты из-за погрешностей. Лучше использовать math.isclose.

import math
print(0.1 + 0.2 == 0.3)  # False
print(math.isclose(0.1 + 0.2, 0.3))  # True

Как объединять логические условия?

Логические операторы: and, or, not. Они работают по принципу короткого замыкания.

a = True
b = False
print(a and b)  # False
print(a or b)   # True
print(not a)    # False

Как использовать логические операторы с небулевыми значениями?

Операторы and и or возвращают не обязательно bool, а один из операндов.

print(0 and 42)      # 0
print("" or "default")  # "default"
print(None or 100)   # 100

Путаница с приоритетом: not имеет более высокий приоритет, чем and, or. Рекомендуется использовать скобки.

print(not True and False)  # False (not True -> False, then False and False -> False)
print(not (True and False)) # True

Какие операторы присваивания существуют?

Базовый оператор = и составные: +=, -=, *=, /=, //=, %=, **=, |=, &= и другие.

x = 10
x += 5   # x = x + 5
print(x) # 15
x //= 2  # 7
print(x) # 7

Как использовать моржовый оператор :=?

Оператор присваивания внутри выражения (walrus operator) появился в Python 3.8. Позволяет присвоить значение и сразу использовать его.

if (n := len([1, 2, 3])) > 2:
    print(f"Длина {n} больше 2")  # Длина 3 больше 2

Ошибки: можно случайно использовать == вместо :=. Моржовый оператор требует скобок в некоторых контекстах.

# Неправильно: if n = 5:  # SyntaxError
# Правильно: if (n := 5): print(n)

Как использовать побитовые операторы?

Побитовые операторы: & (И), | (ИЛИ), ^ (исключающее ИЛИ), ~ (инверсия), << (сдвиг влево), >> (сдвиг вправо). Работают с целыми числами на уровне битов.

a = 0b1100  # 12
b = 0b1010  # 10
print(a & b)   # 0b1000 (8)
print(a | b)   # 0b1110 (14)
print(a ^ b)   # 0b0110 (6)
print(~a)      # -13 (дополнительный код)
print(a << 1) # 0b11000 (24)
print(b >> 1) # 0b0101 (5)

Как использовать побитовые операторы для флагов?

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

READ = 1   # 001
WRITE = 2  # 010
EXEC = 4   # 100
permissions = READ | WRITE   # 011 (3)
if permissions & READ:
    print("Чтение разрешено")
if permissions & EXEC:
    print("Выполнение разрешено")
else:
    print("Выполнение запрещено")

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

Как проверить принадлежность элемента?

Операторы in и not in проверяют, содержится ли элемент в последовательности (строка, список, кортеж, множество, словарь).

fruits = ["яблоко", "банан", "вишня"]
print("банан" in fruits)      # True
print("груша" not in fruits)  # True
print("а" in "Python")        # False (регистрозависимо)

Как использовать in для проверки ключей словаря?

По умолчанию in проверяет ключи, не значения.

d = {"a": 1, "b": 2}
print("a" in d)   # True
print(1 in d)     # False

Ошибки: при проверке в строке учитывается регистр. Используйте методы lower() для регистронезависимого поиска.

Как проверить тождественность объектов?

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

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

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

Для сравнения с None или с singleton-объектами (например, булевы значения).

x = None
if x is None:
    print("x равен None")
if True is True:
    print("Это всегда True")

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

a = 256
b = 256
print(a is b)   # True (кеширование)
c = 257
d = 257
print(c is d)   # False (обычно) - зависит от реализации

Дополнительные примеры использования операторов

Рассмотрим более сложные и редко используемые возможности операторов Python.

Примеры с побитовыми операторами и масками

Пример
# Установка и сброс битов
flag = 0b0000
flag |= 0b0101  # установить биты 0 и 2
print(bin(flag))  # 0b0101
flag &= ~0b0010  # сбросить бит 1
print(bin(flag))  # 0b0101 (бит 1 уже был 0)
# XOR для переключения битов
flag ^= 0b0011
print(bin(flag))  # 0b0110
0b0101
0b0101
0b0110

Использование оператора умножения матриц @

Оператор @ (Python 3.5+) предназначен для умножения матриц. Чаще всего применяется с библиотекой NumPy, но может быть перегружен в пользовательских классах.

Пример
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = A @ B
print(C)
[[19 22]
 [43 50]]

Цепочки сравнений с разными типами

Пример
# Сравнение строк и чисел не поддерживается, но можно сравнивать строки по лексикографическому порядку
print("apple" < "banana")  # True
print([1, 2] < [1, 3])     # True (сравнение элементов)
# Цепочка с разными операторами: a < b > c
print(5 < 10 > 3)  # True (5 < 10 and 10 > 3)
True
True
True

Операторы присваивания с изменяемыми объектами

Пример
# Составное присваивание для списка: += изменяет список на месте
lst = [1, 2]
lst += [3, 4]
print(lst)  # [1, 2, 3, 4]
# Но оператор * не работает для списков как составное присваивание (нужно использовать *=)
lst *= 2
print(lst)  # [1, 2, 3, 4, 1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4, 1, 2, 3, 4]

Логические операторы с коротким замыканием и побочными эффектами

Пример
# or возвращает первый истинный операнд, не вычисляя остальные
def get_value():
    print("Вызов get_value")
    return 42
print(0 or get_value())  # Вызов get_value, затем 42
print(1 or get_value())  # 1 (get_value не вызывается)
Вызов get_value
42
1

Перегрузка операторов в пользовательском классе

Пример
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 __repr__(self):
        return f"Vector({self.x}, {self.y})"
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2)  # Vector(4, 6)
Vector(4, 6)

Использование оператора not in с генераторами

Пример
# Поиск значения в большом диапазоне с помощью генератора и not in
large_range = range(10_000_000)
print(5_000_000 not in large_range)  # False (присутствует)
print(20_000_000 not in large_range) # True
False
True

Типы операторов в Python - comments

En
типы операторов python (python)