Всё о комментариях в языке программирования Python

Раздел: Основы Python -> Синтаксис и стиль

Основы работы с комментариями

Комментарии в Python служат для пояснения кода, оставления заметок разработчикам и временного отключения фрагментов программы. Они не влияют на выполнение, но значительно облегчают понимание и поддержку проекта. Ниже рассмотрены основные способы добавления комментариев, их цели и типичные ошибки.

Как добавить однострочный комментарий?

Самый распространённый и эффективный способ - использовать символ #. Всё, что находится после него до конца строки, считается комментарием и игнорируется интерпретатором.

# Это однострочный комментарий
print('Привет, мир!')  # Комментарий после кода

комментарии в программе python (комментарии в программе на python)

Комментарий можно разместить как на отдельной строке, так и после исполняемого кода. Это удобно для кратких пояснений.

Типичная ошибка: забыть поставить пробел после #. Хотя это не синтаксическая ошибка, отсутствие пробела ухудшает читаемость. Рекомендуется всегда ставить пробел: # текст.

Как закомментировать несколько строк?

Для многострочных комментариев существует два подхода:

Вариант 1: использовать несколько однострочных комментариев с #.

# Это первая строка комментария
# Это вторая строка
# Это третья строка

Вариант 2: использовать тройные кавычки (''' или """). Однако такой способ создаёт строковый литерал, который может быть прочитан как документация (docstring), если размещён сразу после определения функции, класса или модуля. Если это не требуется, лучше применять первый вариант, чтобы избежать путаницы.

'''
Это многострочный комментарий
созданный с помощью тройных кавычек.
'''

Проблема: тройные кавычки, расположенные в произвольном месте, всё равно создают строку, которая не присваивается ни одной переменной. Это может быть неэффективно (занимает память на этапе выполнения) и сбивает с толку других разработчиков, которые могут принять их за docstring.

Как документировать функцию с помощью комментариев?

Для документирования функций, классов и модулей предназначены строки документации (docstrings). Они записываются в тройных кавычках сразу после заголовка определения.

def add(a, b):
    """Возвращает сумму двух чисел.

    Аргументы:
        a (int, float): Первое слагаемое.
        b (int, float): Второе слагаемое.

    Возвращает:
        int, float: Сумма a и b.
    """
    return a + b

Docstring доступны через встроенную функцию help() и инструменты автоматической генерации документации. Это лучшая практика для общедоступных компонентов.

Как временно отключить часть кода?

При отладке часто требуется временно исключить строку или блок кода. Это делается с помощью символа #. Главное - не забыть затем вернуть код обратно.

x = 10
# y = 20  # временно отключено
y = 30
print(x + y)

Ошибка: оставить закомментированный фрагмент в финальной версии без пояснения, почему он отключён. Лучше добавить примечание, например # TODO: убрать после тестирования.

Каких комментариев следует избегать?

Излишние, очевидные или необновлённые комментарии приносят вред. Примеры плохих практик:

x = 5  # присваиваем x значение 5  (избыточно)
# Здесь идёт цикл  (бесполезно)
# 2020-04-01 fixed bug  (устаревшая информация)

Лучше пояснять почему код делает что-то, а не что именно он делает. Хороший комментарий объясняет причину нестандартного решения или ссылается на бизнес-логику.

Расширенные примеры комментариев

Пример 1: Docstring функции с подробным описанием

Следующий код демонстрирует функцию для вычисления факториала с полной документацией.

Пример
def factorial(n):
    """Вычисляет факториал целого неотрицательного числа.

    Параметры:
        n (int): Целое число, для которого вычисляется факториал.

    Возвращает:
        int: Факториал числа n.

    Вызывает:
        ValueError: Если n отрицательное.
    """
    if n < 0:
        raise ValueError('Факториал определён только для неотрицательных чисел')
    result = 1
    for i in range(2, n + 1):
        result *= i
    return result

help(factorial)
Help on function factorial in module __main__:

factorial(n)
    Вычисляет факториал целого неотрицательного числа.

    Параметры:
        n (int): Целое число, для которого вычисляется факториал.

    Возвращает:
        int: Факториал числа n.

    Вызывает:
        ValueError: Если n отрицательное.

Docstring позволяет автоматически сгенерировать справку, что упрощает использование функции другими разработчиками.

Пример 2: Комментирование сложного алгоритма (решето Эратосфена)

Пояснения позволяют разобраться в алгоритме без чтения каждой строки.

Пример
def sieve_of_eratosthenes(limit):
    """Возвращает список простых чисел до limit включительно."""
    # Создаём булевый массив, где True означает 'простое'
    is_prime = [True] * (limit + 1)
    # 0 и 1 не являются простыми
    is_prime[0] = is_prime[1] = False
    
    # Основной цикл: проходим от 2 до sqrt(limit)
    for p in range(2, int(limit**0.5) + 1):
        if is_prime[p]:
            # Вычёркиваем все кратные p, начиная с p*p
            for multiple in range(p*p, limit + 1, p):
                is_prime[multiple] = False
    
    # Собираем числа, оставшиеся простыми
    primes = [i for i, prime in enumerate(is_prime) if prime]
    return primes

print(sieve_of_eratosthenes(30))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

Комментарии объясняют логику каждого шага, что особенно ценно для нетривиальных алгоритмов.

Пример 3: Отладка с помощью временных комментариев и меток TODO

В процессе разработки часто нужно отключить часть кода для тестирования. Хорошая практика - сопровождать такие изменения пометками.

Пример
def process_data(data):
    # TODO: реализовать проверку входных данных
    # if not data:
    #     return None
    
    # Временная заглушка: возвращаем сырые данные
    result = []
    for item in data:
        # item = item.strip()  # отключено для отладки
        result.append(item)
    return result

print(process_data([' a ', ' b ']))
[' a ', ' b ']

Пометка TODO напоминает о незавершённой работе. После тестирования строки с # нужно либо раскомментировать, либо удалить.

Пример 4: Inline-комментарии для пояснения выбора значений

Иногда полезно кратко пояснить, почему выбрана именно такая константа или выражение.

Пример
MAX_RETRIES = 5  # Экспоненциальная задержка, 5 попыток достаточно
timeout = 30  # секунд, стандартный таймаут для HTTP

if retries > MAX_RETRIES:
    # Превышение лимита - вероятно, проблема с сетью
    raise ConnectionError('Не удалось установить соединение после нескольких попыток')

Такие комментарии не объясняют очевидное, а раскрывают мотивацию разработчика.

Комментарии в программе на Python - comments

En
комментарии в программе python (python)