Почему 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 = '''
и
'''