Комментарии в Python — однострочные, многострочные и docstring

19 июня 2026
Автор

Антон Ларичев

Введение

Комментарии — неотъемлемая часть любого кода. Они помогают разработчикам объяснять логику, оставлять заметки для коллег и документировать поведение функций и классов. В Python существует несколько способов добавления комментариев: однострочные, многострочные и специальные строки документации — docstring. В этой статье разберём каждый из них, рассмотрим примеры использования и лучшие практики.

Однострочные комментарии

Однострочный комментарий в Python начинается с символа #. Всё, что идёт после # до конца строки, интерпретатор Python игнорирует.

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

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

Правила оформления по PEP 8

Стандарт PEP 8 задаёт рекомендации по оформлению комментариев:

  • Комментарий начинается с #, за которым следует один пробел
  • Инлайн-комментарии (в конце строки) отделяются от кода минимум двумя пробелами
  • Комментарий должен быть законченным предложением с заглавной буквы
# Правильно: пробел после #
x = 10  # Задаём начальное значение

#Неправильно: нет пробела после #
x = 10 #Слишком близко к коду

Когда использовать однострочные комментарии

Однострочные комментарии полезны, когда нужно:

  • Объяснить неочевидную логику
  • Указать причину выбора конкретного решения
  • Оставить пометку TODO или FIXME
# TODO: оптимизировать алгоритм для больших массивов
def search(data, target):
    # Используем линейный поиск, так как данные не отсортированы
    for item in data:
        if item == target:
            return True
    return False

# FIXME: обработать случай пустого списка
def get_average(numbers):
    return sum(numbers) / len(numbers)

Многострочные комментарии

В Python нет отдельного синтаксиса для многострочных комментариев, как, например, /* ... */ в C или Java. Однако есть два распространённых способа создать комментарий из нескольких строк.

Несколько однострочных комментариев подряд

Самый распространённый и рекомендуемый способ — использовать несколько строк с #:

# Этот блок кода отвечает за подключение к базе данных.
# Сначала проверяем доступность хоста,
# затем устанавливаем соединение с таймаутом 30 секунд.
connection = connect(host, timeout=30)

Строковые литералы с тройными кавычками

Другой способ — использовать строковый литерал с тройными кавычками (""" или '''). Если такая строка не присвоена переменной, Python создаёт строковый объект, но тут же его удаляет:

"""
Этот блок временно закомментирован
для отладки проблемы с авторизацией.
Вернуть после исправления бага #1234.
"""

Важно понимать, что это не настоящий комментарий — это строковый литерал, который Python обрабатывает как выражение. Использовать тройные кавычки для комментирования больших блоков кода удобно при отладке, но в production-коде лучше применять #.

Углубить понимание основ Python и научиться писать чистый, хорошо документированный код поможет практика. Если вы хотите детальнее изучить Python с нуля — приходите на наш большой курс Основы Python. На курсе 209 уроков и 34 упражнения, AI-тренажёры для практики 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

Docstring — строки документации

Docstring (documentation string) — это специальная строка, которая размещается в начале модуля, класса, метода или функции. В отличие от обычных комментариев, docstring сохраняется в атрибуте __doc__ объекта и доступна во время выполнения программы.

Синтаксис docstring

Docstring оформляется тройными кавычками и располагается сразу после объявления:

def greet(name):
    """Возвращает приветственное сообщение для указанного имени."""
    return f"Привет, {name}!"

Для доступа к docstring используется атрибут __doc__ или встроенная функция help():

print(greet.__doc__)
# Вывод: Возвращает приветственное сообщение для указанного имени.

help(greet)
# Выведет справку по функции, включая docstring

Однострочный docstring

Если описание умещается в одну строку, открывающие и закрывающие кавычки располагаются на одной строке:

def square(n):
    """Возвращает квадрат числа n."""
    return n ** 2

Многострочный docstring

Для сложных функций и классов используется многострочный формат. Первая строка — краткое описание, затем пустая строка и развёрнутое описание:

def fetch_data(url, timeout=30, retries=3):
    """Загружает данные по указанному URL.

    Выполняет HTTP GET-запрос с заданным таймаутом.
    При неудаче повторяет запрос указанное количество раз.

    Args:
        url: Адрес для загрузки данных.
        timeout: Максимальное время ожидания в секундах.
        retries: Количество повторных попыток при ошибке.

    Returns:
        Словарь с данными ответа.

    Raises:
        ConnectionError: Если все попытки подключения не удались.
    """
    # Реализация функции
    pass

Стили оформления docstring

Существует несколько популярных стилей оформления docstring:

Стиль Описание Пример секции параметров
Google Читаемый, компактный Args:, Returns:, Raises:
NumPy Подробный, с разделителями Parameters, Returns с подчёркиваниями
Sphinx (reST) Для автогенерации документации :param name:, :returns:, :raises:

Пример в стиле NumPy:

def add(a, b):
    """Складывает два числа.

    Parameters
    ----------
    a : int или float
        Первое слагаемое.
    b : int или float
        Второе слагаемое.

    Returns
    -------
    int или float
        Сумма a и b.
    """
    return a + b

Пример в стиле Sphinx:

def multiply(a, b):
    """Умножает два числа.

    :param a: Первый множитель.
    :type a: int или float
    :param b: Второй множитель.
    :type b: int или float
    :returns: Произведение a и b.
    :rtype: int или float
    """
    return a * b

Docstring для классов и модулей

Docstring применяются не только к функциям. Они используются для документирования классов и целых модулей:

"""Модуль для работы с геометрическими фигурами.

Предоставляет классы Circle и Rectangle
для вычисления площади и периметра.
"""


class Circle:
    """Класс, представляющий круг.

    Attributes:
        radius: Радиус круга в условных единицах.
    """

    def __init__(self, radius):
        """Инициализирует круг с заданным радиусом.

        Args:
            radius: Радиус круга. Должен быть положительным числом.
        """
        self.radius = radius

    def area(self):
        """Вычисляет площадь круга."""
        return 3.14159 * self.radius ** 2

Разница между комментариями и docstring

Важно понимать ключевые различия:

Характеристика Комментарий (#) Docstring (""")
Доступ во время выполнения Нет Да, через __doc__
Назначение Пояснение кода для разработчиков Документация API
Расположение Где угодно в коде В начале функции, класса или модуля
Обработка интерпретатором Полностью игнорируется Сохраняется как атрибут объекта
Используется инструментами Нет Да (Sphinx, pydoc, IDE)

Лучшие практики

Несколько рекомендаций по написанию комментариев и docstring:

  • Пишите «зачем», а не «что». Код сам показывает, что он делает. Комментарий должен объяснять, почему выбрано именно такое решение
  • Обновляйте комментарии. Устаревший комментарий хуже, чем его отсутствие
  • Не комментируйте очевидное. x = x + 1 # увеличиваем x на 1 — бессмысленный комментарий
  • Используйте docstring для публичного API. Каждая публичная функция, класс и модуль должны иметь docstring
  • Выберите один стиль docstring и придерживайтесь его во всём проекте
# Плохо: комментарий дублирует код
counter = 0  # Устанавливаем счётчик в 0

# Хорошо: комментарий объясняет причину
counter = 0  # Сбрасываем счётчик перед повторной обработкой пакета

Частые ошибки

  • Закомментированный код в production. Удаляйте ненужный код, а не комментируйте его — для истории есть Git
  • Устаревшие комментарии. Комментарий, описывающий старую логику, вводит в заблуждение и создаёт баги
  • Отсутствие docstring у публичных функций. Без документации пользователи вашего кода вынуждены читать исходники
  • Использование docstring вместо комментариев. Тройные кавычки внутри тела функции (не в начале) — это просто строковый литерал, а не документация
  • Слишком длинные инлайн-комментарии. Если комментарий длиннее самого кода, лучше вынести его на отдельную строку выше

Частозадаваемые вопросы

Можно ли использовать тройные кавычки для многострочных комментариев? Технически да, но это не настоящие комментарии. Python создаёт строковый объект, который затем удаляется сборщиком мусора. Для многострочных комментариев рекомендуется использовать несколько строк с #.

В чём разница между """ и ''' для docstring? Функциональной разницы нет. По соглашению PEP 257 рекомендуется использовать двойные кавычки """.

Нужно ли писать docstring для приватных методов? Это зависит от проекта. Для приватных методов со сложной логикой docstring полезен, но для простых внутренних методов он необязателен.

Как автоматически проверять наличие docstring? Используйте линтеры: pydocstyle проверяет соответствие PEP 257, а pylint предупреждает об отсутствии docstring у публичных объектов.

Влияют ли комментарии на производительность? Нет. Интерпретатор Python полностью игнорирует комментарии при компиляции байт-кода. Docstring сохраняются в памяти, но их влияние на производительность минимально.

Заключение

Комментарии и docstring — важные инструменты для создания читаемого и поддерживаемого кода на Python. Однострочные комментарии с # подходят для пояснений конкретных строк, многострочные блоки из # — для описания логики целых секций, а docstring — для документирования публичного API функций, классов и модулей. Для закрепления навыков работы с Python и написания профессионального кода рекомендуем курс Основы Python. В первых 3 модулях курса доступно бесплатное содержание, что позволяет освоить базовый синтаксис и понять структуру курса до покупки полного доступа.

Стрелочка влевоКонтекстный менеджер with в Python — как работает и зачем нуженКакой Python выбрать для установкиСтрелочка вправо

Постройте личный план изучения Python до уровня Middle — бесплатно!

Python — часть карты развития Backend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Все гайды по Python

Как отправлять запросы с помощью requests в PythonПочему Python выводит значение без команды printКак работает команда print в PythonВозможности Python для автоматизации задачРабота с JSON в Python на примерахPython get — методы получения данныхКак находить и исправлять ошибки в PythonРабота с данными через API и внешние сервисыСтруктура и оформление кода PythonОсновы Django с PythonПолезные приёмы в Python для повседневной работыИспользование locals в Python для отладкиИнтеграция PHP и PythonКак выполнять HTTPS-запросы в PythonFastAPI Python — быстрый старт: создание REST API с нуляКак работать с API в Python
Ввод целого числа в PythonВедение логов в PythonУдаление данных в Python с помощью removeОбработка исключений с помощью try/except в PythonФункция super() в Python — как вызвать метод родителяСоздание собственных контекстных менеджеров в PythonРабота с символами программирования PythonРабота с переменной X в PythonРабота с классами в PythonКак скачать Python на компьютерПростая программа на Python для начинающихОсновы Python для тех, кто начинаетЧто нового в Python 3Поддерживается ли Python 2 и стоит ли его использоватьPython 1 — с чего начиналась история языкаКоманда python print - полное руководство по выводу данныхПравила именования переменных в PythonПользовательские исключения в PythonОсновы Python coreОписание объектов PythonНаследование классов в Python — основы и примерыМножественное наследование в Python — примеры и MROКонтекстный менеджер with в Python — как работает и зачем нуженКомментарии в Python — однострочные, многострочные и docstringКакой Python выбрать для установкиКак вывести целое число с помощью print в PythonКак установить Python на Windows macOS и LinuxКак пользоваться консолью PythonКак получить последний элемент в PythonКак найти значение в PythonКак настроить PythonКак использовать print для строк в PythonКак работает интерпретатор PythonИнструкция по работе с PythonБлок finally в обработке исключений PythonЦелые числа в PythonАбстрактные классы в Python — ABC и abstractmethod
Возврат значений из функции в PythonВложенные функции в PythonСоздание собственных декораторов в PythonРабота с функцией map в PythonЦикл while в Python и примеры использованияОбработка чисел, введённых через input в PythonОсновные операторы в Python с примерамиУсловные выражения if else в Python для начинающихКак выполняется вызов функций call в PythonПродвинутые генераторы в Python — send, throw, close и корутиныПозиционные и именованные аргументы в PythonОбъявление переменных и управление областью видимости в PythonПередача аргументов по ссылке и по значению в PythonПередача аргументов через args и kwargs в PythonОсновные методы Python и примеры их использованияОператор match/case в Python 3.10+ — основы структурного сопоставленияПаттерны match/case в Python — деструктуризация, guard и вложенные шаблоныПрактические примеры match/case в Python — реальные сценарии примененияЛокальные и глобальные переменные в PythonЧасто используемые команды PythonКлючевые слова global и nonlocal в PythonКак создавать функции в PythonКак работает сборщик мусора в PythonКак работает область видимости переменных в PythonКак работает функция callable в PythonКак работает функция any и all в PythonКак проверить тип переменной в PythonКак передать функцию как аргумент в PythonКак использовать функцию isinstance в PythonКак использовать функцию filter в PythonКак использовать функцию filter в PythonКак использовать функцию eval безопасно в PythonКак использовать декораторы в PythonИзменяемые и неизменяемые типы данных в PythonГенераторы и yield в Python — как создавать и использоватьГенераторные выражения в Python — синтаксис и примерыФункции в Python и способы их вызоваФункции как объекты в PythonЧто такое замыкания в PythonЧто делает функция reduce в PythonЧто делает функция id в PythonАргументы по умолчанию в PythonАнонимные функции и lambda в PythonАлгоритмы на Python — примеры и объяснение
Загрузка данных PythonУправление проектами на GitHub с PythonСоздание веб-приложений на Flask PythonСоздание бота на PythonСоздание интерфейсов Python QTСоздание игр с PygameСоздание GUI в PythonКак работать со словарями в PythonРабота с библиотеками через Python PackagingРабота со временем в Python при помощи модуля timePython name — особенности переменнойМатематические операции в Python с модулем mathPython listing — что это и как использоватьPytest — тестирование на Python: полное руководствоОбработка изображений с OpenCV PythonNumPy в Python — основы и применение в задачахМашинное обучение с PythonИспользование Anaconda с PythonМодуль contextlib в Python — утилиты для контекстных менеджеровБиблиотеки Python и их применение в проектах
Запись данных в PythonУстановка pip в PythonУправление зависимостями requirement в PythonУправление библиотеками с помощью Python PackagingУдаление пробелов с помощью strip в PythonСтруктурирование кода в PythonСоздание исполняемого файла Python в exeРазбор traceback в модуле PythonРазбор site-packages в PythonРазбор Program Files в PythonРабота с Unicode кодировками в PythonРабота с системными функциями Python sysРабота с папкой AppData в PythonРабота с модулем logging в PythonРабота с каталогами в PythonРабота с CSV в PythonВиртуальная среда venv в Python — создание и настройкаКак создать простое приложение на PythonИспользование pip в Python для установки пакетовМодули в Python и организация кода в проектеИмпорт модулей в Python и правила подключенияРабота с файлами в Python пошаговоЧто делает компилятор Python и как он работаетПолучение строки из модуля PythonПодключение файлов в Python с includeПеременные среды в PythonСборка проекта с помощью packaging в PythonНастройка Python сервераИспользование Python на UbuntuИспользование консоли PythonИспользование кодировок в PythonИнициализация пакетов PythonИмпорт модулей PythonИмпорт имен в PythonСреда IDLE Python и базовые возможностиЧтение и запись TXT в PythonЧтение файлов в Python с помощью open file
Удаление элементов из списка PythonТипы данных в Python — обзор и рекомендацииМетоды str в Python и обработка текстаОсновные операции со строками в PythonСписки в Python и их ключевые методыСоздание списков данных в PythonРабота со строками и символами в PythonРабота со столбцами в PythonРабота со списком значений в PythonРабота с таблицами в Python с помощью DataFrameРабота с RFR в PythonРабота с пробелами в PythonРабота с массивами в PythonРабота с кортежами tuple PythonРабота с координатами X и Y в PythonРабота с ключами в PythonРабота с элементами данных PythonРабота с двоичными числами PythonРабота с данными в PythonРабота с данными NumPy PythonРабота с большими числами в PythonРабота с битами в PythonРабота с байтами в PythonЧто такое значение в Python и как его определитьМножества в Python и операции с нимиИспользование range в Python для цикловПроверка на четность в PythonПроверка числа в PythonПреобразование типов в PythonПреобразование списка в строку PythonПреобразование числа в строку в PythonПостроение графиков в PythonОпределение индекса элемента в PythonОкругление чисел в PythonОбъединение списков в Python с помощью zipМножества в PythonМассивы в Python и отличие от списковМассив чисел в PythonКортежи данных в PythonКак вычислить сумму чисел в PythonКак получить остаток от деления в PythonКак найти следующее число в PythonИспользование Unicode в PythonТип int в Python и его особенностиИндекс списка в PythonФункции для работы со строками в PythonЭлементы Python и способы доступа к нимДоступ к элементам массива в PythonДеление чисел в PythonРабота с данными в Python на практикеКак работать с числами в Python
Открыть базу знаний

Лучшие курсы по теме

Иконка молнииНовый
изображение курса

Основы Python

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Nest.js с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.6
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Docker и Ansible

Антон Ларичев
AI-тренажерыAI-тренажеры
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий