Выражения языка Python: полное руководство с примерами
Общее понятие выражений в Python
Выражением в Python называется конструкция, которая после вычисления возвращает некоторое значение. Это может быть любое сочетание литералов, переменных, вызовов функций и операторов, которое интерпретатор способен свернуть в один объект. Понимание того, как строятся выражения, лежит в основе написания любого кода. Далее рассмотрены основные подходы к созданию выражений, их разновидности и частые проблемы.
Базовый механизм: любое выражение вычисляется до единственного значения
Простейший пример - литерал числа или строки. 5 само по себе является выражением, результатом которого будет число 5. Переменная x тоже выражение, её значение берётся из текущего состояния памяти. Комбинируя литералы, переменные и операторы, получают составные выражения. Например, 2 + 3 * 4 - выражение, которое по правилам приоритета сначала умножит 3 на 4, затем прибавит 2.
# Простейшие выражения
42 # целочисленный литерал
3.14 # вещественный литерал
"Hello" # строковый литерал
x = 10 # оператор присваивания (сам не выражение, но правая часть = 10 - выражение)
result = x + 5 # составное выражение x + 5выражения языка python (выражения в python)
Интерпретатор вычисляет выражение и возвращает объект. Если выражение используется в качестве правой части присваивания или аргумента функции, его результат подставляется в нужное место.
Типичная ошибка:
Путаница между операторами сравнения и присваивания. if x = 5: вызовет синтаксическую ошибку, поскольку x = 5 в Python не является выражением (это инструкция). Правильно: if x == 5:.
Как выполнить математические операции в Python?
Арифметические выражения используют операторы +, -, *, /, // (целочисленное деление), % (остаток от деления), ** (возведение в степень).
a = 15
b = 4
print(a + b) # 19
print(a - b) # 11
print(a * b) # 60
print(a / b) # 3.75
print(a // b) # 3
print(a % b) # 3
print(a ** b) # 50625значение выражения python (значение выражений в python)
Целочисленное деление и остаток полезны при работе с циклами и делением нацело. Возведение в степень часто применяется в научных расчётах.
Проблема:
Деление на ноль (a / 0) вызывает исключение ZeroDivisionError. Перед делением стоит проверять знаменатель.
Как проверять условия с помощью логических операторов?
Логические выражения возвращают булевы значения True или False. Используются операторы and, or, not.
x = 10
y = 20
print(x > 5 and y < 30) # True
print(x > 15 or y == 20) # True
print(not x == 10) # Falseоператоры языка python (операторы в python)
Логические операторы часто применяются в условных конструкциях (if, while).
Типичная ошибка:
Использование and и or с небулевыми значениями. Python допускает короткое замыкание: 0 and x вернёт 0, а не False, что может привести к неожиданным результатам.
Как сравнивать значения в Python?
Операторы сравнения: == (равно), != (не равно), <, >, <=, >=. Они возвращают True или False.
a = 5
b = '5'
print(a == b) # False (разные типы)
print(str(a) == b) # True
print(10 > 5) # True
print(10 <= 9) # Falseоператор python примеры (примеры операторов в python)
Сравнения можно объединять в цепочки: 1 < x < 10 эквивалентно 1 < x and x < 10.
Как работать со строками в выражениях?
Строковые выражения включают конкатенацию (+), повторение (*), извлечение символов по индексу и срезы.
s1 = "Hello"
s2 = "World"
print(s1 + " " + s2) # Hello World
print(s1 * 3) # HelloHelloHello
print(s1[1:4]) # ell
print(len(s1)) # 5 (выражение-вызов функции)
Строковые выражения широко используются при форматировании вывода и обработке текста.
Проблема:
Конкатенация большого числа строк через + может быть неэффективной. В таких случаях лучше применять метод join или f-строки.
Как записать условие в одной строке (тернарный оператор)?
Тернарное условное выражение имеет вид значение_если_истина if условие else значение_если_ложь.
age = 18
status = "совершеннолетний" if age >= 18 else "несовершеннолетний"
print(status) # совершеннолетний
Тернарный оператор позволяет компактно выбирать одно из двух значений без полного блока if-else.
Как создать коллекцию на основе выражения (list comprehension)?
Генератор списка (list comprehension) - это выражение, которое создаёт новый список, применяя операцию к каждому элементу итерируемого объекта с возможной фильтрацией.
numbers = [1, 2, 3, 4, 5]
squares = [n ** 2 for n in numbers if n % 2 == 0]
print(squares) # [4, 16]
Аналогичные выражения существуют для множеств (set comprehension) и словарей (dict comprehension).
Типичная ошибка:
Излишняя вложенность. Сложные comprehension трудно читать, лучше выносить логику в отдельные функции.
Как определить анонимную функцию в выражении (лямбда)?
Лямбда-выражение создаёт безымянную функцию. Синтаксис: lambda аргументы: выражение.
add = lambda a, b: a + b
print(add(3, 4)) # 7
# Использование в filter
nums = [1, 2, 3, 4, 5]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens) # [2, 4]
Лямбда-функции применяются там, где нужна короткая функция на один раз, например, в качестве аргумента сортировки или фильтрации.
Проблема:
В лямбда-выражении допускается только одно выражение. Для сложной логики следует определять обычную функцию.
Как присвоить значение внутри выражения (walrus operator)?
Оператор моржа (:=) позволяет присваивать значение переменной прямо в выражении и сразу его использовать.
# Без моржа
data = input("Введите число: ")
if data.isdigit():
print(int(data) * 2)
# С моржом
if (n := input("Введите число: ")).isdigit():
print(int(n) * 2)
Полезен, когда значение переменной нужно и для проверки, и для последующего использования, и код становится короче.
Типичная ошибка:
Попытка использовать оператор моржа в старых версиях Python (до 3.8). Также не стоит злоупотреблять им, чтобы не ухудшать читаемость.
Расширенные примеры выражений
В этом разделе представлены более сложные и неочевидные способы использования выражений в Python.
Пример 1. Цепочки сравнений с разными операторами
x = 7
result = 1 < x < 10 and x % 2 == 0
print(result) # False (7 нечётное)
False
Цепочка 1 < x < 10 равносильна 1 < x and x < 10. Её можно комбинировать с любыми другими логическими операторами.
Пример 2. Комбинирование тернарного выражения и генератора
nums = [1, 2, 3, 4, 5, 6]
even_squares = [n ** 2 if n % 2 == 0 else n for n in nums]
print(even_squares) # [1, 4, 3, 16, 5, 36]
[1, 4, 3, 16, 5, 36]
Внутри спискового включения можно использовать тернарный оператор для выбора преобразования элемента.
Пример 3. Выражение с моржом и list comprehension
from math import sqrt
values = [4, 9, 16]
sqrt_values = [root for val in values if (root := sqrt(val)) > 3]
print(sqrt_values) # [4.0] (только для 16, корень 4.0 > 3)
[4.0]
Оператор моржа позволяет вычислить значение один раз и использовать его и в условии фильтра, и в результирующем списке.
Пример 4. Вложенные тернарные выражения (с осторожностью)
a, b, c = 5, 10, 15
result = "A больше" if a > b else "B больше" if b > c else "C больше или все равны"
print(result) # C больше или все равны
C больше или все равны
Тернарные выражения можно вкладывать, но это снижает читаемость. Лучше заменить на if-elif-else.
Пример 5. Арифметическое выражение с использованием модуля math
import math
angle = math.pi / 4
# Выражение: корень из суммы квадратов синуса и косинуса
result = math.sqrt(math.sin(angle)**2 + math.cos(angle)**2)
print(result) # 1.0 (основное тригонометрическое тождество)
1.0
Здесь выражение состоит из вызовов функций и арифметических операций, при этом оно всё равно остаётся единым выражением.
Пример 6. Выражение-генератор (не список) для экономии памяти
gen = (x ** 2 for x in range(1000000) if x % 2 == 0)
# Берём первые 5 значений
import itertools
first_five = list(itertools.islice(gen, 5))
print(first_five) # [0, 4, 16, 36, 64]
[0, 4, 16, 36, 64]
Выражение-генератор в круглых скобках не создаёт весь список в памяти, а выдаёт элементы по одному. Это эффективно при работе с большими данными.
Пример 7. Условное выражение с коротким замыканием and/or
name = input("Введите имя: ") or "Гость"
print("Привет, " + name)
Привет, Гость (если ничего не введено)
Выражение input() or "Гость" вернёт строку, введённую пользователем, если она не пустая, иначе "Гость". Это короткая запись для значения по умолчанию.