Гид по технологиям

Условный оператор if в Python

5 min read Программирование Обновлено 09 Apr 2026
Условный оператор if в Python
Условный оператор if в Python

Код на экране ПК, рядом на столе лежит телефон

Кратко: Оператор if — базовый строительный блок логики в Python. В этой статье объяснены синтаксис if/elif/else, логические операторы (and, or, not, in), применение в циклах, функциях, лямбдах и list comprehension, а также рекомендации и чек-листы для разработки и тестирования.

Как работает оператор if в Python

Обычно условные выражения в Python начинаются с ключевого слова if. Условие — это правило, заданное программистом, которое проверяет, истинно ли выражение. По сути условие проверяет корректность некоторой логики и направляет выполнение программы.

Базовый формат оператора if выглядит так:

if an event is True:  
      Execute some commands...  

Оператор if может использоваться самостоятельно, но чаще его комбинируют с elif и else для расширения логики. Также в условиях можно применять not, and, or и in.

Замечание: переводы или пояснения строк внутри код-блоков в статье не изменяются — блоки кода сохранены в исходном виде для корректного запуска.

Как использовать if и if…else в Python

С помощью if вы говорите Python выполнить набор команд, если выражение истинно:

if 5 > 3:  
    print("Valid")

Комбинация if и else позволяет выполнить альтернативный набор команд, если условие ложно:

a = 10  
b = 3  
  
if a == b:  
   print("They're the same")  
else:  
   print("They're not the same")

Как использовать if…elif…else

elif в Python эквивалентен else if в других языках. Если нужно проверить несколько взаимоисключающих вариантов, используйте elif между if и else:

a = 10  
b = 3  
  
if b == a:  
    print(a + b)  
elif b * a == 30:  
    print(b - a)  
else:  
    print("impossible")  

Выполнение происходит сверху вниз: первое истинное условие срабатывает, последующие не проверяются.

Можно использовать любое количество elif:

myList = ['Python', 'MUO', 'Hello']  
  
if 'Python' in myList:  
    print("No")  
elif 'N' in myList[1]:  
    print("MUO")  
elif 'e' in myList[2]:  
    print("Hello")  
else:  
    print("None is true")  

Операторы in, and, or с if

Ключевое слово in удобно для проверки наличия элемента в последовательности:

myList = ['Python', 'MUO', 'Hello']  
  
if 'Python' in myList:  
    print("It's in the list")  

Для проверки нескольких условий используйте and:

myList = ['Python', 'MUO', 'Hello']  
  
if 'Python' in myList and 'Hello' in myList:  
    print("Hello Python")  

Можно короче записать через множества:

myList = ['Python', 'MUO', 'Hello']  
  
if {'Python', 'Hello'}.issubset(myList):  
    print("Hello Python")  

Чтобы проверить, присутствует ли хотя бы один элемент, используйте or:

myList = ['Python', 'MUO', 'Hello']  
  
if 'Python' in myList or 'Bags' in myList:  
    print("One of them is on the list")   

if внутри цикла for

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

myList = ['Python', 'MUO', 'Hello']  
myList2 = ["Fish", "Gold", "Bag"]  
  
if len(myList) == 3:  
    for items in myList:  
        print(items)  
else:  
    for items2 in myList2:  
        print(items2)  

Другой пример — фильтрация по длине строки во время итерации:

myList = ['Python', 'MUO', 'Hello', 'Books', 'Pizza', 'Four']  
myList2 = ["Fish", "Gold", "Bag"]  
  
for items in (myList + myList2):  
    if len(items) == 4:  
        print(items)  

if в функциях

Условные выражения часто добавляют в функции для изменения поведения в зависимости от аргументов:

def checkString(list1, list2):  
    for items in (list1 + list2):  
        if len(items) == 4:  
            print(items)  
  
List1 = ['Python', 'MUO', 'Hello', 'Books', 'Pizza', 'Four']  
List2 = ["Fish", "Gold", "Bag"]  
  
checkString(List1, List2)  

if с лямбда-функцией

Можно выразить ту же логику в виде лямбды и лист-компрехеншена:

checkString = lambda a, b: [y for y in (a + b) if len(y) == 4]  
  
print(checkString(List1, List2))  

Возвращается список, потому что используется list comprehension.

if в list comprehension

Условие легко встроить внутрь comprehension:

myList = ['Python', 'MUO', 'Hello', 'Books', 'Pizza', 'Four']  
myList2 = ["Fish", "Gold", "Bag"]  
lis = [lists for lists in (myList + myList2) if len(lists) == 4]  
print(lis)

Можно комбинировать if с and/or прямо в comprehension:

myList = ['Python', 'MUO', 'Hello', 'Books', 'Pizza', 'Four']  
myList2 = ["Fish", "Gold", "Bag"]  
lis = [lists for lists in (myList + myList2) if ('P' in lists or 'F' in lists)]  
print(lis)  
  

Вложенные if в comprehension

Иногда используют несколько if подряд в comprehension, например для выбора чисел, делящихся и на 3, и на 5:

B = range(31)  
A = [x for x in B if x % 3 == 0 if x % 5 ==0]  
print(A)  
  

Аналогично можно получить set comprehension:

A = {x for x in B if x % 3 == 0 if x % 5 ==0}  
print(A)  
  

Когда if может не подойти (примеры отказа)

  • Слишком длинная цепочка if/elif приводит к плохой читаемости; вместо этого лучше использовать словарь сопоставлений (mapping) или полиморфизм.
  • Для сложных условий с несколькими взаимозависимыми флагами проще написать явную функцию проверки или использовать таблицу истинности, чем длинные логические выражения.
  • Если поведение зависит от типа данных, лучше применять динамическую диспетчеризацию (pattern matching в Python 3.10+ или dict of handlers), а не только вложенные if.

Пример, когда if неэффективен: множество комбинаций флагов A, B, C -> 2^3 веток. В этом случае лучше выделить логику в отдельные функции и вызывать их по ключу.

Альтернативные подходы

  • Тernary operator (тернарный оператор) для простых ветвлений: x if condition else y
  • dict dispatch: {“case1”: handler1, …}.get(key, default)()
  • match/case (Python 3.10+) для сопоставления структур
  • Полиморфизм и стратегии: передать объект с нужным поведением вместо множества if-ов

Пример замены if на dict dispatch:

def handle_add():
    return "add"

def handle_remove():
    return "remove"

handlers = {"add": handle_add, "remove": handle_remove}

action = "add"
print(handlers.get(action, lambda: "unknown")())

Эвристики и рекомендации

  • Держите тело if коротким — делайте return/raise как можно раньше.
  • Предпочитайте очевидность краткости: “if condition: return” лучше, чем вложенные блоки.
  • Используйте понятные имена переменных в условиях: is_valid, has_items, user_is_admin.
  • Проверяйте границы и граничные случаи в начале функции.
  • Для сложных условий выделяйте отдельные вспомогательные функции с говорящими названиями.

Чек-листы по ролям

Разработчик:

  • Понятные имена условий и переменных
  • Минимизация глубины вложенности
  • Юнит-тесты для каждой ветки

Тестировщик:

  • Тесты на позитивные и негативные кейсы
  • Тесты на граничные значения (пустые коллекции, None, очень большие значения)
  • Проверка ожидаемых исключений

Преподаватель / наставник:

  • Демонстрация разницы между if/elif/else и паттерн-матчингом
  • Примеры рефакторинга длинных веток в стратегии или dict dispatch

Шпаргалка (cheat sheet)

  • if condition: — основная конструкция
  • if…else — две ветки
  • if…elif…else — несколько вариантов
  • x if c else y — тернарный оператор
  • ‘elem’ in seq — проверка принадлежности
  • a and b, a or b, not a — логические связки

Мермайд: простая диаграмма принятия решения

flowchart TD
    Start'[start]' --> Cond{условие}
    Cond -- Да --> Action1[Выполнить ветку A]
    Cond -- Нет --> Cond2{есть ли elif}
    Cond2 -- Да --> Action2[Проверить elif]
    Cond2 -- Нет --> Action3[Выполнить else]
    Action1 --> End'[конец]'
    Action2 --> End
    Action3 --> End

Критерии приёмки

  • Все ветки кода покрыты юнит-тестами
  • Логика понятна по именам переменных и вспомогательным функциям
  • Нет длинных вложенных цепочек глубиной более 3 уровней
  • Входные данные валидируются до основной логики

Краткий глоссарий (1 строка)

  • Условие — логическое выражение, результатом которого является True или False.

Замечания по безопасности и производительности

  • Не выполняйте дорогостоящие операции в условиях без необходимости — вычисления внутри if происходят даже если ветка не выполняется (для выражений в условии они вычисляются при проверке).
  • Если условие вызывает побочные эффекты, лучше вынести вызов в отдельную переменную и протестировать её значение.

Итоги

Условные операторы — фундамент программной логики. Правильный выбор между if/elif/else, comprehension, лямбдой или альтернативными подходами (dispatch, match/case) повышает читаемость и сопровождаемость кода. Используйте эвристики и чек-листы из статьи, чтобы держать код простым, понятным и тестируемым.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Массивы в Bash: синтаксис и примеры
Программирование

Массивы в Bash: синтаксис и примеры

Сбросить страницу «Для вас» в TikTok
Социальные сети

Сбросить страницу «Для вас» в TikTok

Создать GIF из YouTube — GIFs.com
Руководство

Создать GIF из YouTube — GIFs.com

Как сделать карусель Instagram в InDesign
Дизайн

Как сделать карусель Instagram в InDesign

Как объединить PDF на Mac
Mac

Как объединить PDF на Mac

Как примерить тату в Photoshop
Дизайн

Как примерить тату в Photoshop