Операторы

Что такое оператор, операнд?

подробнее

Оператор - это символ или зарезервированное слово, которое выполняет какое-то действие (операцию). Это «глагол» в коде.
Операнд - это данные, над которыми выполняется действие. Это «существительное».

Примечание:

В Python почти все операторы — это “синтаксический сахар”. Когда ты пишешь a + b, Python на самом деле вызывает магический метод a.__add__(b).

Пример:

  • x + 5
    • + — это оператор (сложение).
    • x и 5 — это операнды.

Классификация

  • По количеству операндов:
    • Унарные: один операнд (например, -x — меняет знак).
    • Бинарные: два операнда (a > b, x * y).
    • Тернарный: три операнда (A if condition else B).
  • По типу действия:
    • Арифметические: +, -, *, /, // (целочисленное), % (остаток), ** (степень).
    • Сравнения: ==, !=, >, <, >=, <=.
    • Логические: and, or, not.
    • Присваивания: =, +=, -= и т.д.
    • Побитовые: & (and), | (or), ^ (xor), ~ (not), <<, >>.

Что такое литерал?

подробнее

Литерал - это запись в коде, которая представляет собой фиксированное значение «как оно есть», а не имя переменной.
Пример: x = 5, x - это переменная, а 5 - литерал.

Виды литералов в python:

  • Числовые: 10 (int), 3.14 (float), 1j (complex).
  • Строковые: 'Hello', "World", """Многострочный текст""".
  • Логические: True, False.
  • Специальный: None.
  • Контейнерные (коллекции):
    • [] — пустой list (литерал списка).
    • {} — пустой dict (литерал словаря).
    • () — пустой tuple (литерал кортежа).
    • {1, 2}set (литерал множества).

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

подробнее

== (оператор равенства)

  • Сравнивает значения объектов
  • Возвращает True, если содержимое объектов одинаковое
  • Может быть переопределён в классах через метод __eq__

is (оператор идентичности)

  • Сравнивает ссылки на объект
  • Возвращает True, только если это один объект
  • Эквивалентно проверке id(a) == id(b)
  • Часто is используется для сравнения с None
  • Числа и строки в современном python кешируются из-за этого сравнение строк и чисел с одинаковым значением выдадут True
# Пример кеширования
a, b = 123, 123
print(a is b)  # True

c, d = 'abc', 'abc'
print(c is d)  # True

Как работают and, or, not операторы?

подробнее

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

Оператор and

  • Возвращает True, если оба операнда истинны.
  • Если первый операнд ложный, возвращает его и не проверяет второй (short-circuit evaluation).
  • Если первый операнд истинный, возвращает второй операнд.

Оператор or

  • Возвращает True, если хотя бы один операнд истинен.
  • Если первый операнд истинный, возвращает его и не проверяет второй (short-circuit evaluation).
  • Если первый операнд ложный, возвращает второй операнд.

Оператор not

  • Унарный оператор, который инвертирует логическое значение.
  • Всегда возвращает True или False.

Что такое тернарный оператор?

подробнее

Тернарный оператор - это способ записать простое условие if-else в одну строку.

Пример:

# обычный if-else:
if x % 2 == 0:
    status = "Четное"
else:
    status = "Нечетное"

# тернарный аналог:
status = "Четное" if x % 2 == 0 else "Нечетное"

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

Прямого ключевого слова elif в тернарном операторе не существует.
Логику elif можно имитировать через вложенность.

Пример:

# обычный if-elif-else:
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
else:
    grade = "C"

# тернарный аналог:
grade = "A" if score >= 90 else ("B" if score >= 80 else "C")

Использование круглых скобок

подробнее
  • Группировка и приоритет (Math)
    Скобки меняют порядок выполнения операций. То, что в скобках, вычисляется первым.

    result = (2 + 3) * 4  # 20 (без скобок было бы 14)
    
  • Неявный перенос строк (Implicit Line Joining)
    Это предпочтительный способ разбивать длинные выражения по PEP 8 вместо использования обратного слеша \. Внутри скобок Python «ждет» закрытия, поэтому перенос строки не обрывает код.

    • Для длинных условий:

      if (connection_is_active and 
          user_has_permissions and 
          not resource_is_locked):
          ...
      
    • Для длинных строк (конкатенация):

      text = (
          "Это очень длинная строка, "
          "которую мы разбили на части "
          "без использования плюсов."
      )
      
  • Вызов (Callable)
    Скобки после имени объекта — это команда «выполнись».
    • Функции/Методы: print(), my_func(arg)
    • Классы (инстанцирование): user = User() - вызывает __new__() и __init__().
    • Любой объект с методом __call__(): Если у объекта есть этот магический метод, его можно «вызвать» как функцию: my_obj().
  • Скобки в кортежах (Tuple)
    Сами по себе скобки не создают кортеж (кроме пустого ()). Кортеж создает запятая.
    • (1) — это просто число int в скобках.
    • (1,) — это кортеж из одного элемента.
    • 1, - тоже кортеж из одного элемента