Почему Python не имеет многострочных комментариев?

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

"""Hello, I am a 
   multiline comment"""

и

'''Hello, I am a 
   multiline comment'''

но технически говоря, это строки, правильно?

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

16 ответов


Я сомневаюсь, что вы получите лучший ответ, чем "Гвидо не чувствовал необходимости для многострочных комментариев".

Гвидо твиттере это:

Python tip: вы можете использовать многострочные строки в качестве многострочных комментариев. Если они не используются в качестве docstrings, они не генерируют код! :-)


многострочные комментарии легко ломаются. Что делать, если у вас есть следующее в простой программе калькулятора?

operation = ''
print("Pick an operation:  +-*/")
# Get user input here

попробуйте прокомментировать это многострочным комментарием:

/*
operation = ''
print("Pick an operation:  +-*/")
# Get user input here
*/

Oops, ваша строка содержит разделитель конечного комментария.


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

по словам Гвидо, многострочные комментарии в Python - это просто непрерывные однострочные комментарии (поиск "блокировать комментарии").

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

if False:
    # A bunch of code

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


ну, тройные кавычки используются в качестве многострочных комментариев в docstrings. И # комментарии используются в качестве встроенных комментариев, и люди привыкают к нему.

большинство языков сценариев также не имеют многострочных комментариев. Может в этом причина?

посмотреть PEP 0008, раздел комментарии

и посмотреть, если ваш редактор Python предлагает некоторые сочетания клавиш для блокировки комментариев. Emacs поддерживает его, а также Eclipse, предположительно, большинство приличных IDEs делает.


с Дзен питона:

должен быть один-и, желательно, только один-очевидный способ сделать это.


лично мой стиль комментариев в say Java похож на

/*
 * My multi-line comment in Java
 */

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

#
# My multi-line comment in Python
#

VB.NET это также язык с однострочным комментарием, и лично я нахожу его раздражающим, поскольку комментарии в конечном итоге выглядят менее похожими на комментарии и больше похожи на какую-то цитату

'
' This is a VB.NET example
'

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


# This
# is
# a 
# multi-line
# comment

используйте блок комментариев или найдите и замените (s/^/#/g) в своем редакторе, чтобы достичь этого.


чтобы закомментировать блок кода Pycharm IDE:

  • код / комментарий с комментарием строки
  • Windows или Linux: Ctrl + /
  • Mac OS:команда + /

Я решил это, загрузив макрос для моего текстового редактора (TextPad), который позволяет мне выделять строки, а затем вставляет # в первую из каждой строки. Аналогичный макрос удаляет#. Некоторые могут спросить, почему необходима многострочная, но она пригодится, когда вы пытаетесь "отключить" блок кода для целей отладки.


потому что # convention является общим, и на самом деле нет ничего, что вы можете сделать с многострочным комментарием, который вы не можете с комментарием #-sign. Это историческая случайность, как и происхождение /* ... */ комментарии, возвращающиеся к PL/I,


предположим, что они просто считались ненужными. Так как это так легко просто ввести #a comment, многострочные комментарии могут состоять только из многих однострочных комментариев.

на HTML-код, С другой стороны, есть необходимость multiliners. Труднее продолжать печатать <!--comments like this-->.


Это только предположение .. но!--1-->

поскольку они являются строками, они имеют некоторое семантическое значение (компилятор не избавляется от них), поэтому имеет смысл использовать их в качестве docstrings. Они фактически становятся частью АСТ, поэтому извлечение документации становится проще.


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

void someFunction()
{
    Something
    /*Some comments*/
    Something else
}

затем вы обнаруживаете, что в вашем коде есть что-то, что вы не можете исправить с помощью отладчика, поэтому вы начинаете вручную отлаживать его, комментируя все меньшие и меньшие фрагменты кода с помощью этих многострочных комментариев. Это дало бы затем функция:

void someFunction()
{ /*
    Something
   /* Comments */
   Something more*/
}

Это действительно раздражает.


многострочные комментарии с помощью ожидания on:

  • Mac OS X, после выбора кода, прокомментируйте блок кода с Ctrl+3 и раскомментировать с помощью Ctrl+4.

  • Windows после выбора кода , прокомментируйте блок кода с помощью Ctrl+Alt+3 и раскомментировать с помощью Ctrl+At+4.


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

x = '''
This is my
super-long mega-comment.
Wow there are a lot of lines
going on here!
'''

Это занимает немного памяти, но это дает вам функциональность многострочных комментариев, и плюс большинство редакторов выделит синтаксис для вас :)

Это также легко прокомментировать код, просто обернув его с

x = '''

и

'''