Виды комментариев в языке Python и их применение
Основной способ: однострочные комментарии
Комментарии в Python начинаются с символа # и продолжаются до конца строки. Все символы после решётки игнорируются интерпретатором. Это единственный официальный и рекомендуемый способ добавления комментариев.
# Это комментарий
print("Привет, мир!") # Можно ставить после кодакомментарий на языке python (комментарии в python)
Однострочные комментарии используют для кратких пояснений, пометок TODO, временного отключения отдельных строк кода. Они не влияют на производительность и не сохраняются в байт-коде.
Типичная ошибка:
Забывают ставить пробел после # - это не ошибка, но ухудшает читаемость. Рекомендуется писать # текст. Также комментарии, состоящие только из # без текста, допустимы, но неинформативны.
Как создать многострочный комментарий?
В Python нет специального синтаксиса для многострочных комментариев. Часто используют тройные кавычки ''' или """, которые создают строковый литерал. Если такой литерал не присвоен переменной, он игнорируется интерпретатором, но всё равно остаётся в коде как строка.
'''
Это многострочный комментарий
с помощью тройных апострофов
'''
Такой подход не рекомендуется для обычных комментариев, так как строка сохраняется в байт-коде, что неэффективно. Лучше использовать несколько однострочных #. Исключение - docstrings (см. ниже).
Проблема:
Если тройные кавычки стоят сразу после объявления функции или модуля, они интерпретируются как docstring и становятся доступны через __doc__. Это может вызвать путаницу, если вы не планировали документировать объект. Решение: для недокументирующих многострочных комментариев используйте только #.
Как правильно оформлять документацию с помощью docstrings?
Docstrings - это специальные строки документации, которые пишутся сразу после заголовка модуля, функции, класса или метода. Они становятся атрибутом объекта и используются инструментами автодокументирования (Sphinx, pydoc). Рекомендуется использовать тройные двойные кавычки """...""".
def multiply(a, b):
"""Возвращает произведение двух чисел."""
return a * b
print(multiply.__doc__) # Вывод: Возвращает произведение двух чисел.
Следуйте PEP 257: первая строка - краткое описание с заглавной буквы и точкой, затем пустая строка и более подробное описание, включая параметры и возвращаемое значение.
def divide(a, b):
"""
Делит первое число на второе.
Аргументы:
a (float): делимое
b (float): делитель
Возвращает:
float: результат деления
Исключения:
ZeroDivisionError: если b равно 0
"""
if b == 0:
raise ZeroDivisionError("Деление на ноль")
return a / b
Docstrings не являются комментариями в строгом смысле, но выполняют похожую роль. Они не игнорируются интерпретатором, а сохраняются как строки.
Как временно отключить блок кода?
Для отладки или тестирования часто нужно временно закомментировать несколько строк. Проще всего поставить # перед каждой строкой. В современных IDE это делается комбинацией клавиш (Ctrl+/).
# print("Эта строка отключена")
# print("И эта тоже")
print("Эта выполняется")
Альтернатива - использовать тройные кавычки, но это менее наглядно и может нарушить синтаксис, если внутри уже есть строки с кавычками.
Ошибка:
Если внутри отключаемого блока есть строки с такими же тройными кавычками, возникнет SyntaxError. Решение: использовать только # для временного отключения.
Как использовать комментарии для аннотаций и метаданных?
Комментарии с # могут содержать специальные маркеры, например TODO, FIXME, HACK, XXX. Инструменты анализа кода (Todoist, IDE) могут собирать такие пометки.
# TODO: оптимизировать алгоритм для больших данных
# FIXME: исправить обработку граничных значений
result = complex_computation()
Также комментарии могут пояснять назначение переменных или логику, которую сложно передать через имя.
users = get_users() # список активных пользователей за последние 24 часа
Расширенные примеры использования комментариев
1. Комментарии для генерации документации (Sphinx)
Sphinx распознаёт docstrings в формате reStructuredText. Пример модуля с документацией:
"""
Модуль для работы с геометрическими фигурами.
Содержит классы Circle и Rectangle.
"""
import math
class Circle:
"""
Класс, представляющий круг.
Атрибуты:
radius (float): радиус круга
"""
def __init__(self, radius):
self.radius = radius
def area(self):
"""Вычисляет площадь круга."""
return math.pi * self.radius ** 2
print(Circle.__doc__)
print(Circle.area.__doc__)
Класс, представляющий круг.
Атрибуты:
radius (float): радиус круга
Вычисляет площадь круга.
2. Использование комментариев для отладки с условной печатью
Часто временно включают отладочный вывод, закомментировав его или раскомментировав.
DEBUG = True # Переключатель отладки
if DEBUG:
# print("Отладочное сообщение 1")
# print("Отладочное сообщение 2")
pass
Удобнее использовать флаг с условным выполнением:
def debug(*args):
if DEBUG:
print(*args)
debug("Значение x:", x)
3. Комментарии в условных конструкциях и циклах
Пояснение сложной логики внутри циклов:
for i in range(100):
# Пропускаем первые 10 итераций
if i < 10:
continue
# Обработка только чётных чисел
if i % 2 != 0:
continue
process(i)
4. Документирование функций с помощью аннотаций типов и docstring
Аннотации типов (Python 3.5+) не являются комментариями, но улучшают читаемость в сочетании с docstring:
def filter_positive(numbers: list[int]) -> list[int]:
"""
Отбирает положительные числа из списка.
Аргументы:
numbers: список целых чисел.
Возвращает:
Список положительных чисел.
"""
return [n for n in numbers if n > 0]
5. Комментарии для временного скрытия кода с помощью условной конструкции
Вместо комментирования строк можно использовать флаг:
ENABLE_FEATURE = False
if ENABLE_FEATURE:
print("Новая функциональность")
else:
print("Старая ветка")
Это позволяет легко переключать режимы без редактирования множества строк.
6. Специальные комментарии для маркеров (TODO, FIXME) с поиском по проекту
# TODO: вынести в отдельный модуль
# FIXME: не учитывается часовой пояс
# HACK: временное решение до версии 2.0
def parse_date(date_str):
return datetime.strptime(date_str, "%Y-%m-%d")
В PyCharm, VS Code и других IDE есть встроенный список TODO.
7. Комментарии внутри docstring с примерами использования (doctest)
def add(a, b):
"""
Складывает два числа.
>>> add(2, 3)
5
>>> add(-1, 1)
0
"""
return a + b
if __name__ == "__main__":
import doctest
doctest.testmod()
Запуск модуля выполнит тесты из docstring и выведет результаты.