info@severcart.org
Русский English

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

4 января 2018 г.    Python

Поддерживает ли Python многострочные комментарии так, как это реализовано в других языках? Какие варианты написания блочных комментариев в Python?

В большинстве языков программирования присутствует синтаксис для блочных комментариев, которые охватывают несколько строк текста, например C или Java:

/*
Блочный комментарий.
Охватывает несколько строк.
*/
int answer = 42;

Есть ли в Python аналогичные многострочные комментарии? Короткий ответ: нет, по крайней мере, не совсем точно так же.

Python использует различные соглашения и синтаксис для блочных комментариев, которые охватывают несколько строк. В этой статье будут показаны некоторые варианты создания многострочных комментариев в Python.

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

Первым вариантом для комментирования нескольких строк кода в Python является простое использование # однострочного комментария для каждой строки:

# Это «блочный комментарий» в Python, сделанный
# из нескольких однострочных комментариев.

answer = 42

Большинство проектов Python следуют этому стилю, а руководство по стилю написания кода PEP 8 Python также рекомендует использовать повторяющиеся однострочные комментарии. Поэтому в большинстве случаях рекомендуется использовать их. Это также единственный способ написать «реальных» блочных комментариев в Python, которые игнорируется парсером.

Т.к. Python не поддерживает истинные многострочные комментарии, то для того чтобы закомментировать несколько строк кода требуется больше усилий. Приведём ряд полезных советов по ускорения работы с ними. У большинства редакторов кода есть шорткаты для блочных комментариев. Например, в Sublime Text достаточно просто выбирать пару строк, используя shift и клавиши курсора (или мышь), а затем нажимать cmd + /, чтобы закомментировать их все сразу.

Это даже работает в обратном порядке, то есть можно выбрать блок однострочных комментариев, и когда набирается клавиатурный шорткат cmd + /, весь блок снова раскомментируется.

Другие редакторы тоже поддерживают такую возможность: Atom, VS Code и даже Notepad++ имеют встроенные шорткаты для блочного комментирования в Python. Управление комментариями Python вручную – это неблагодарная работа, поэтому такая функция редактора может сэкономить много времени.

Вариант 2: использование многострочных строк вместо комментариев

Ещё одним вариантом для написания «правильных» многострочных комментариев в Python является использование многострочных строк с синтаксисом """ (три кавычки). Например:

"""
Блок комментариев в Python, сделанный
из многострочной строковой константы.
"""
answer = 42

Можно использовать тройные кавычки для создания чего-то, что напоминает многострочный комментарий в Python. Необходимо убедиться, что правильно ввели «"», иначе будет получено исключение SyntaxError. Например, если нужно определить блочный комментарий внутри функции с помощью такого синтаксиса, то должны выполнить это следующим образом:

def add_stuff(a, b):
    result = a + b
    """
    Теперь возвращается результат.
    Ещё один пример многострочного комментария.
    """
    return result

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

Тем не менее, такая потерянная строковая константа не будет отображаться в байт-коде, фактически превращая её в многострочный комментарий. Далее доказательство того, что неиспользуемая строка не будет отображаться в дизассемблированном байт-коде CPython:

>>> import dis
>>> dis.dis(add_stuff)
  2    0 LOAD_FAST      0 (a)
       2 LOAD_FAST      1 (b)
       4 BINARY_ADD
       6 STORE_FAST     2 (result)
  8    8 LOAD_FAST      2 (result)
      10 RETURN_VALUE

Однако будьте осторожны, когда помещаете такие «комментарии» в код. Если строка следует сразу после сигнатуры функции, определения класса или в начале модуля, она превращается в docstring, которая имеет совсем другое значение в Python:

def add_stuff(a, b):
    """
    Это теперь связанная с docstring функция
     с объектом функции и доступным как
     метаданные времени выполнения.
    """
    result = a + b
    return result

Docstrings («строки документации») позволяют сопоставлять удобочитаемую документацию с модулями, функциями, классами и методами Python. Они отличаются от комментариев исходного кода.

Комментарий удаляется парсером, тогда как docstring встраивается в байт-код и ассоциируется с документированием объекта. Её можно даже запросить к программному объекту во время выполнения.

Как это было сказано ранее, единственный способ получить «истинные» многострочные комментарии в Python, которые игнорируются парсером, заключается в использовании нескольких комментариев # для каждой однострочной строки.

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

Выводы

  • В отличие от других языков программирования Python не поддерживает многострочные комментарии из коробки.
  • Рекомендуемый способ закомментировать несколько строк кода в Python - использовать последовательные # однострочные комментарии. Это единственный способ получить «истинные» комментарии в исходном коде, которые удаляются парсером Python.
  • Вы можете использовать строки с тремя кавычками «"», чтобы создать что-то похожее на многострочные комментарии в Python, но это не идеальный метод, и такие могут превратиться в случайные docstrings.