Все операторы Python для начинающих

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

Основные операторы Python

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

Для сложения, вычитания, умножения, деления используются операторы +, -, *, /. Целочисленное деление выполняется оператором //, остаток от деления %, возведение в степень **.

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

выражения языка python (выражения в python)

Альтернативно можно использовать встроенные функции pow() для возведения в степень и divmod() для одновременного получения частного и остатка.

print(pow(a, b))      # 1000
print(divmod(a, b))   # (3, 1)

значение выражения python (значение выражений в python)

Типичная ошибка: деление на ноль вызывает исключение ZeroDivisionError. Всегда проверяется делитель перед использованием.

if b != 0:
    print(a / b)
else:
    print("Деление на ноль")

операторы языка python (операторы в python)

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

Операторы сравнения: ==, !=, >, <, >=, <=. Они возвращают True или False.

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

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

Для сравнения с учётом точности чисел с плавающей точкой используется math.isclose().

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

Частая ошибка: путаница между = (присваивание) и == (сравнение). При использовании одного знака в условии возникает SyntaxError или логическая ошибка.

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

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

age = 25
has_license = True
if age >= 18 and has_license:
    print("Может водить")

Можно использовать цепочки сравнений без явного and, например if 18 <= age < 65.

if 18 <= age < 65:
    print("Взрослый трудоспособного возраста")

Проблема: приоритет логических операторов. and имеет более высокий приоритет, чем or. Для ясности используются круглые скобки.

# Без скобок результат может быть неожиданным
if (age > 18 or age == 18) and has_license:
    pass

Как изменить значение переменной с помощью операции?

Операторы присваивания с операцией: +=, -=, *=, /=, //=, %=, **=.

count = 10
count += 5  # count = 15
count -= 3  # count = 12
print(count)

Можно записать длинную форму: count = count + 5. Но оператор присваивания короче и читаемее.

Ошибка: попытка использовать += с неизменяемыми типами (строками, кортежами) работает, но создаётся новый объект. Для списков += изменяет список на месте.

Как выполнить побитовые операции?

Битовые операторы: & (И), | (ИЛИ), ^ (исключающее ИЛИ), ~ (НЕ), << (сдвиг влево), >> (сдвиг вправо).

x = 5   # 0101
 y = 3   # 0011
 print(x & y)  # 0001 -> 1
 print(x | y)  # 0111 -> 7
 print(x ^ y)  # 0110 -> 6
 print(~x)     # 1010 -> -6 (в дополнительном коде)
 print(x << 1) # 1010 -> 10
 print(x >> 1) # 0010 -> 2

Для работы с отдельными битами удобно использовать функцию bin().

print(bin(x))   # 0b101
print(bin(y))   # 0b11
print(bin(x & y)) # 0b1

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

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

Оператор in проверяет членство (для списков, строк, кортежей, множеств, словарей).

fruits = ["яблоко", "банан", "вишня"]
if "банан" in fruits:
    print("Есть банан")

Для строк in проверяет подстроку.

text = "Hello, world"
print("world" in text)  # True

Ошибка: путаница с not in. Для проверки отсутствия используется if not item in list: или if item not in list: (рекомендуется второй вариант).

Как узнать, является ли объект тем же самым, что и другой?

Оператор is проверяет идентичность (ссылаются ли переменные на один и тот же объект в памяти).

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

Для сравнения содержимого используется ==. is применяется в основном для проверки на None: if x is None.

Ложное срабатывание: для малых целых чисел и коротких строк Python может кешировать объекты, поэтому is может вернуть True для одинаковых литералов, но на это полагаться не стоит. Используется == для сравнения значений.

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

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

Пример
x = 15
if 10 < x < 20:
    print("x в диапазоне 10..20")
x в диапазоне 10..20
Цепочки читаются как (10 < x) and (x < 20). Ошибка: запись 10 < x < 20 работает, но 10 < x and x < 20 эквивалентна. Нельзя пропускать переменную.

Как присвоить значение переменной внутри выражения (оператор walrus)?

Пример
numbers = [1, 2, 3, 0, 5]
while (n := len(numbers)) > 0:
    print(f"Осталось {n} элементов")
    numbers.pop()
Осталось 5 элементов
Осталось 4 элемента
Осталось 3 элемента
Осталось 2 элемента
Осталось 1 элемент
Оператор := доступен с Python 3.8. Ошибка: попытка использования в более старых версиях вызывает SyntaxError.

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

Пример
name = input("Введите имя: ") or "Аноним"
print(f"Привет, {name}!")
Введите имя: 
Привет, Аноним!
Оператор or возвращает первый истинный операнд. Если ввод пустая строка (ложь), то выбирается "Аноним". Однако если ожидается False или 0 как допустимое значение, этот прием не подходит.

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

Пример
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)
Перегрузка требует реализации магических методов. Если не переопределить __add__, оператор + вызовет TypeError. Также нужно переопределять обратные операции (__radd__) для корректной работы с несимметричными типами.

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

Пример
READ = 1     # 001
WRITE = 2    # 010
EXECUTE = 4  # 100

permissions = READ | WRITE  # 011
if permissions & EXECUTE:
    print("Есть право исполнения")
else:
    print("Нет права исполнения")
Нет права исполнения
При определении флагов степени двойки не должны пересекаться. Для включения флага используется |=, для выключения &= ~. Ошибка: попытка использовать небитовые операторы для управления флагами.

Как работает оператор not в неожиданных контекстах?

Пример
a = []
b = [1, 2]
if not a:
    print("a пустой")
if b and not a:
    print("b не пустой, a пустой")
a пустой
b не пустой, a пустой
Оператор not инвертирует истинность. Для пустых контейнеров (список, строка, словарь) возвращается True. Это часто используется для проверки пустоты, но может ввести в заблуждение, если объект имеет другую логическую интерпретацию.

Операторы в Python - comments

En
операторы языка python (python)