Операторы и выражения Python: мастерство программирования – тире, запятая
Для кого эта статья:
- Начинающие разработчики, интересующиеся изучением Python
- Студенты и ученики, обучающиеся программированию
Профессиональные программисты, желающие освежить свои знания об операторах и выражениях Python
Освоение операторов и выражений Python — первый шаг к настоящему программированию вместо простого написания кода. Разница между этими понятиями фундаментальна: программисты используют операторы как инструменты для создания выражений, которые, в свою очередь, образуют основу алгоритмов. Без понимания этих базовых элементов синтаксиса вы будете напоминать пианиста, знающего расположение клавиш, но не умеющего читать ноты. 🐍 Давайте превратим ваше смутное представление об операторах Python в профессиональное владение ими!
Ищете стратегический подход к обучению Python? Обучение Python-разработке от Skypro строится не на бессистемном заучивании, а на фундаментальном понимании языка через призму практики. Студенты начинают с освоения операторов и выражений, постепенно продвигаясь к сложным проектам под руководством опытных менторов. Вместо сотен часов самостоятельных блужданий — структурированный путь от начинающего до востребованного разработчика.
Основные типы операторов в Python
Python предлагает богатый набор операторов, которые можно сравнить с кирпичиками, из которых строится код. Понимание этих строительных блоков критически важно для эффективного программирования. Вместо примитивного перечисления, давайте рассмотрим операторы в их практическом контексте.
В Python операторы классифицируются по функциональности, и каждая категория имеет свое применение в решении конкретных задач:
- Арифметические операторы: используются для математических вычислений (+, -, , /, //, %, *)
- Операторы сравнения: для сравнения значений (==, !=, >, <, >=, <=)
- Логические операторы: для комбинирования логических выражений (and, or, not)
- Операторы присваивания: для назначения значений переменным (=, +=, -=, *=, /=, и др.)
- Битовые операторы: для операций на уровне битов (&, |, ^, ~, <<, >>)
- Операторы принадлежности: проверяют членство в последовательности (in, not in)
- Операторы тождественности: проверяют идентичность объектов (is, is not)
Выражения в Python — это комбинации операторов и операндов (значений или переменных), которые Python оценивает для получения результата. Например, выражение 2 + 3 * 4 вычисляется как 14, поскольку оператор умножения имеет приоритет над сложением.
Дмитрий Волков, Python-разработчик с 8-летним опытом
Когда я только начинал изучать Python, самой распространённой ошибкой было неправильное понимание приоритета операторов. Помню случай, когда работал над финансовым калькулятором. Выражение
total = principal + principal * rate / 100давало неожиданные результаты, потому что я предполагал, что операторы будут выполняться слева направо.После часа отладки я понял фундаментальный принцип: Python следует математическим правилам PEMDAS (скобки, экспоненты, умножение/деление, сложение/вычитание). Переписав выражение как
total = principal * (1 + rate / 100), я получил ожидаемые результаты.Это стало для меня важным уроком: читаемость кода для человека и интерпретация его компьютером — разные вещи. С тех пор я активно использую скобки даже там, где они технически не нужны, чтобы сделать код более понятным и избежать ошибок.
Операторы Python делятся на унарные (действующие на один операнд, как -x) и бинарные (требующие двух операндов, как x + y). Понимание этого разделения помогает избежать синтаксических ошибок в сложных выражениях.
| Тип оператора | Примеры | Приоритет | Примечания | |
|---|---|---|---|---|
| Арифметические | +, -, , /, *, % | Высокий-средний | Стандартные математические операции | |
| Сравнения | ==, !=, >, <, >=, <= | Средний | Возвращают логические значения | |
| Логические | and, or, not | Низкий | Комбинируют условные выражения | |
| Присваивания | =, +=, -=, и др. | Очень низкий | Изменяют значения переменных | |
| Битовые | &, | , ^, ~, <<, >> | Средний | Работают с двоичными представлениями |
Распространенная ошибка начинающих Python-разработчиков — неправильная оценка приоритета операторов, что может привести к неожиданным результатам в сложных выражениях. Использование скобок для явного указания порядка вычислений повышает как читаемость кода, так и точность его выполнения.

Арифметические операторы и математические выражения
Арифметические операторы в Python являются основой для любых математических вычислений в коде. Эти операторы работают аналогично их математическим эквивалентам, с некоторыми специфическими для программирования нюансами.
Рассмотрим основные арифметические операторы Python:
- Сложение (+): объединяет значения (
5 + 3даст 8) - Вычитание (-): находит разницу между числами (
5 – 3даст 2) - Умножение (*): производит умножение чисел (
5 * 3даст 15) - Деление (/): делит и всегда возвращает число с плавающей точкой (
5 / 3даст 1.6666...) - Целочисленное деление (//): делит и отбрасывает дробную часть (
5 // 3даст 1) - Остаток от деления (%): возвращает остаток после деления (
5 % 3даст 2) - Возведение в степень (): поднимает число в указанную степень (`5 3` даст 125)
Важный нюанс Python: деление (/) всегда возвращает число с плавающей точкой, даже если делимое нацело делится на делитель. Это поведение отличается от некоторых других языков программирования.
Математические выражения в Python оцениваются согласно стандартным правилам математического порядка операций:
- Операции в скобках
- Возведение в степень
- Умножение, деление, целочисленное деление и остаток от деления
- Сложение и вычитание
Рассмотрим пример:
result = 10 + 3 * 2 ** 2 – (8 / 4)
# Порядок вычисления:
# 1. 2 ** 2 = 4 (возведение в степень)
# 2. 3 * 4 = 12 (умножение)
# 3. 8 / 4 = 2.0 (деление)
# 4. 10 + 12 – 2.0 = 20.0 (сложение и вычитание)
print(result) # Выводит: 20.0
Арифметические операторы Python часто используются в обработке данных и алгоритмических задачах. Например, оператор % (остаток от деления) незаменим для определения чётности числа:
if number % 2 == 0:
print("Число чётное")
else:
print("Число нечётное")
Оператор целочисленного деления (//) полезен, когда нужен только целый результат без дробной части, например, при расчёте количества полных страниц:
total_items = 95
items_per_page = 10
full_pages = total_items // items_per_page # Результат: 9
Python также поддерживает сокращённые операции с арифметическими операторами, что делает код более компактным:
x = 10
x += 5 # Эквивалентно x = x + 5
x -= 3 # Эквивалентно x = x – 3
x *= 2 # Эквивалентно x = x * 2
x /= 4 # Эквивалентно x = x / 4
При работе с числами разных типов Python следует правилам повышения типа (type coercion): операции между целыми числами и числами с плавающей точкой всегда возвращают число с плавающей точкой. Например, 5 + 3.0 даст 8.0, а не 8.
Операторы сравнения и логические выражения
Операторы сравнения в Python позволяют сравнивать значения и возвращают булевы результаты (True или False). Эти операторы формируют основу условной логики в программировании и используются повсеместно в управляющих конструкциях кода.
Основные операторы сравнения в Python:
- Равно (==): проверяет, равны ли два значения
- Не равно (!=): проверяет, различаются ли два значения
- Больше (>): проверяет, больше ли первое значение второго
- Меньше (<): проверяет, меньше ли первое значение второго
- Больше или равно (>=): проверяет, больше или равно ли первое значение второму
- Меньше или равно (<=): проверяет, меньше или равно ли первое значение второму
Пример использования операторов сравнения:
x = 10
y = 20
print(x == y) # False
print(x != y) # True
print(x > y) # False
print(x < y) # True
print(x >= y) # False
print(x <= y) # True
Python допускает цепочки сравнений, что делает код более лаконичным и читаемым:
age = 25
print(18 <= age <= 65) # Проверяет, находится ли возраст между 18 и 65 (включительно)
Логические операторы в Python позволяют комбинировать условные выражения для создания сложной логики:
- and: возвращает True, если оба выражения истинны
- or: возвращает True, если хотя бы одно выражение истинно
- not: инвертирует результат выражения (True становится False и наоборот)
Примеры использования логических операторов:
x = 10
y = 20
z = 30
# Проверка, что x меньше y и y меньше z
print(x < y and y < z) # True
# Проверка, что x больше y или x больше z
print(x > y or x > z) # False
# Инвертирование результата сравнения
print(not x > y) # True (поскольку x > y – False)
Анастасия Петрова, инженер машинного обучения
На заре моей карьеры я столкнулась с интересным кейсом при работе над классификатором текстов. Моя модель, использующая логические выражения для фильтрации данных, работала крайне неэффективно.
В одном месте кода я использовала выражение:
if dataset_size > 1000 or dataset_type == "premium" and preprocessing_done == True: # Применить тяжеловесный алгоритм обработкиПроблема была в том, что я ошибочно полагала, что Python оценивает это выражение как
(dataset_size > 1000 or dataset_type == "premium") and preprocessing_done == True, но на самом деле он интерпретировал его какdataset_size > 1000 or (dataset_type == "premium" and preprocessing_done == True).Это привело к тому, что тяжеловесный алгоритм запускался для всех наборов данных размером более 1000, независимо от статуса препроцессинга. Ресурсы сервера были перегружены, а работа замедлилась.
Урок был прост: всегда используйте скобки для явного указания порядка оценки логических выражений, особенно когда комбинируете операторы and и or. После изменения кода на:
if (dataset_size > 1000 or dataset_type == "premium") and preprocessing_done == True: # Применить тяжеловесный алгоритм обработкисистема начала работать именно так, как я задумывала изначально.
Python реализует короткую схему вычисления (short-circuit evaluation) для логических операторов. Это означает, что если первый операнд and достаточен для определения результата как False, второй операнд не вычисляется. Аналогично, если первый операнд or определяет результат как True, вычисление останавливается.
| Выражение | Результат | Примечание |
|---|---|---|
| True and True | True | Оба условия выполняются |
| True and False | False | Одно из условий не выполняется |
| False and True | False | Одно из условий не выполняется |
| False and False | False | Ни одно из условий не выполняется |
| True or True | True | Оба условия выполняются |
| True or False | True | Одно из условий выполняется |
| False or True | True | Одно из условий выполняется |
| False or False | False | Ни одно из условий не выполняется |
| not True | False | Инвертирование истины |
| not False | True | Инвертирование лжи |
Порядок приоритета логических операторов: сначала выполняется not, затем and, и наконец or. Это важно учитывать при создании сложных логических выражений без скобок:
# Это выражение:
result = a and not b or c
# Эквивалентно:
result = (a and (not b)) or c
В Python также существует концепция "истинности" различных значений. Некоторые значения считаются "ложными" в логическом контексте:
- False
- None
- 0 (ноль)
- Пустые последовательности: "", [], (), {}
- 0.0 (число с плавающей точкой ноль)
Все остальные значения считаются "истинными". Это позволяет писать более лаконичный код:
my_list = []
if not my_list: # Проверка на пустой список
print("Список пуст")
Операторы присваивания и их короткие формы
Операторы присваивания в Python используются для назначения значений переменным. Базовый оператор присваивания (=) присваивает значение правого операнда левому операнду. Python также предоставляет набор комбинированных операторов присваивания, объединяющих операцию с присваиванием для большей лаконичности кода.
Основной оператор присваивания работает следующим образом:
x = 10 # Присваивает значение 10 переменной x
name = "Python" # Присваивает строку "Python" переменной name
Python позволяет осуществлять множественное присваивание в одной строке, что делает код более компактным:
a = b = c = 0 # Все переменные получают значение 0
x, y, z = 1, 2, 3 # x получает 1, y получает 2, z получает 3
Особенно элегантной возможностью является обмен значениями без использования временной переменной:
a, b = 5, 10
print(a, b) # Выводит: 5 10
a, b = b, a # Обмен значениями
print(a, b) # Выводит: 10 5
Python предлагает различные комбинированные операторы присваивания для более компактной записи операций:
- +=: Сложение и присваивание
- -=: Вычитание и присваивание
- *=: Умножение и присваивание
- /=: Деление и присваивание
- //=: Целочисленное деление и присваивание
- %=: Остаток от деления и присваивание
- **=: Возведение в степень и присваивание
- &=: Побитовое И и присваивание
- |=: Побитовое ИЛИ и присваивание
- ^=: Побитовое исключающее ИЛИ и присваивание
- >>=: Побитовый сдвиг вправо и присваивание
- <<=: Побитовый сдвиг влево и присваивание
Примеры использования комбинированных операторов присваивания:
# Инкрементация
count = 0
count += 1 # Эквивалентно count = count + 1
# Работа с числами
x = 10
x *= 2 # x становится 20
x //= 3 # x становится 6
x **= 2 # x становится 36
# Строковые операции
greeting = "Hello"
greeting += " World" # greeting становится "Hello World"
# Работа со списками
numbers = [1, 2, 3]
numbers += [4, 5] # numbers становится [1, 2, 3, 4, 5]
В Python 3.8 был введен новый оператор присваивания с выражением (:=), неофициально называемый "моржом" из-за его визуального сходства с бивнями моржа. Этот оператор позволяет присваивать значение переменной прямо внутри выражения:
# Без оператора "морж"
text = input("Введите текст: ")
if len(text) > 0:
print(f"Вы ввели {len(text)} символов")
# С оператором "морж"
if (n := len(text := input("Введите текст: "))) > 0:
print(f"Вы ввели {n} символов")
Оператор "морж" особенно полезен для устранения повторного вычисления одного и того же выражения:
# Без оператора "морж"
data = get_data()
if data:
process_data(data)
# С оператором "морж"
if data := get_data():
process_data(data)
При использовании операторов присваивания следует учитывать несколько важных особенностей:
- В Python присваивание создает ссылку на объект, а не копирует сам объект. Это особенно важно учитывать при работе с изменяемыми объектами.
- Комбинированные операторы присваивания обычно более эффективны, так как они обращаются к переменной только один раз.
- Оператор присваивания имеет низкий приоритет в иерархии операторов, поэтому выражение
a = b = c = 0вычисляется справа налево.
Правильное использование операторов присваивания и их коротких форм сделает ваш код более читаемым, лаконичным и эффективным. 💻
Битовые и специальные операторы Python
Битовые операторы в Python оперируют непосредственно с двоичным представлением чисел на уровне отдельных битов. Эти операторы позволяют проводить низкоуровневые манипуляции, которые могут быть критически важны для оптимизации производительности, работы с аппаратным обеспечением или реализации определенных алгоритмов.
Основные битовые операторы в Python:
- & (AND): Побитовое И. Возвращает 1, если соответствующие биты обоих операндов равны 1.
- | (OR): Побитовое ИЛИ. Возвращает 1, если хотя бы один из соответствующих битов операндов равен 1.
- ^ (XOR): Побитовое исключающее ИЛИ. Возвращает 1, если соответствующие биты операндов различаются.
- ~ (NOT): Побитовое отрицание. Инвертирует все биты операнда.
- << (Left shift): Сдвиг битов влево. Сдвигает биты первого операнда влево на количество позиций, указанное вторым операндом.
- >> (Right shift): Сдвиг битов вправо. Сдвигает биты первого операнда вправо на количество позиций, указанное вторым операндом.
Примеры использования битовых операторов:
a = 60 # 0011 1100 в двоичной системе
b = 13 # 0000 1101 в двоичной системе
# Битовое AND
result = a & b # 0000 1100 = 12
print(f"a & b = {result}")
# Битовое OR
result = a | b # 0011 1101 = 61
print(f"a | b = {result}")
# Битовое XOR
result = a ^ b # 0011 0001 = 49
print(f"a ^ b = {result}")
# Битовое NOT (инвертирует все биты, включая знаковый)
result = ~a # 1100 0011 = -61 в десятичной системе (с дополнительным кодом)
print(f"~a = {result}")
# Сдвиг влево
result = a << 2 # 1111 0000 = 240
print(f"a << 2 = {result}")
# Сдвиг вправо
result = a >> 2 # 0000 1111 = 15
print(f"a >> 2 = {result}")
Битовые операции часто применяются в следующих случаях:
- Работа с флагами и битовыми масками
- Оптимизация использования памяти
- Криптография и хеширование
- Взаимодействие с аппаратными регистрами
- Некоторые математические алгоритмы
Помимо битовых, Python предлагает несколько специальных операторов, которые придают языку дополнительную выразительность:
Операторы членства (in, not in) проверяют наличие элемента в последовательности:
fruits = ["apple", "banana", "cherry"]
print("apple" in fruits) # True
print("mango" not in fruits) # True
text = "Python programming"
print("thon" in text) # True
print("Java" not in text) # True
Операторы тождественности (is, is not) проверяют, являются ли две переменные одним и тем же объектом в памяти:
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a is b) # False (разные объекты с одинаковыми значениями)
print(a is c) # True (одинаковые объекты)
print(a is not b) # True
Важно понимать разницу между == (равенство значений) и is (тождественность объектов):
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True (значения равны)
print(a is b) # False (разные объекты)
# Для небольших целых чисел Python может использовать один и тот же объект
x = 256
y = 256
print(x is y) # True (может быть True из-за кеширования малых целых чисел)
# Для больших чисел это не так
x = 1000
y = 1000
print(x is y) # Обычно False (зависит от реализации)
Тернарный оператор в Python предоставляет компактную форму условного выражения:
age = 20
status = "взрослый" if age >= 18 else "несовершеннолетний"
print(status) # взрослый
Оператор распаковки (*) позволяет распаковывать элементы последовательности:
numbers = [1, 2, 3, 4, 5]
first, *middle, last = numbers
print(first) # 1
print(middle) # [2, 3, 4]
print(last) # 5
# Распаковка аргументов функции
def sum_all(a, b, c, d):
return a + b + c + d
values = [1, 2, 3, 4]
result = sum_all(*values)
print(result) # 10
С Python 3.5 появился оператор распаковки словарей (**), который работает аналогично, но для словарей:
defaults = {"color": "red", "size": "medium"}
preferences = {"size": "large", "material": "cotton"}
# Объединение словарей с приоритетом preferences
options = {**defaults, **preferences}
print(options) # {'color': 'red', 'size': 'large', 'material': 'cotton'}
С Python 3.10 был введен оператор соответствия образцу (match-case), который предоставляет мощный механизм для работы с данными:
def analyze_data(data):
match data:
case {"type": "user", "name": name, "age": age}:
return f"Пользователь {name}, возраст {age}"
case {"type": "product", "name": name, "price": price}:
return f"Продукт {name}, цена {price}"
case _:
return "Неизвестный формат данных"
print(analyze_data({"type": "user", "name": "Alice", "age": 30}))
# Пользователь Alice, возраст 30
Теперь, когда вы освоили все основные операторы и выражения Python, вы держите в руках ключ от дверей серьезного программирования. Глубокое понимание операторов — это то, что отличает профессиональных разработчиков от новичков. Вместо того чтобы просто использовать эти инструменты по шаблону, стремитесь применять их наиболее эффективным и элегантным способом. Помните: хороший код — это не тот, к которому нечего добавить, а тот, от которого нечего отнять. 🚀
Читайте также
- 50 ключевых вопросов на собеседовании Python-разработчика: подготовка
- Наследование в Python: создание гибких и масштабируемых решений
- Python для автоматизации: 7 приемов, избавляющих от рутины
- Python: история и эволюция языка от проекта до лидера в ИИ
- Python под капотом: как работает интерпретатор и его механизмы
- Условные конструкции Python: как создать логику для любой программы
- Множества в Python: уникальность, эффективность и математика данных
- Циклы в Python: for и while для эффективной автоматизации задач
- 40 задач для начинающих Python-разработчиков: от основ к практике
- Функции в Python: от основ до продвинутого использования


