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



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



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


и



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


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



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

618   16  

16 ответов:

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

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

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

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

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

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

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

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

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

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

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

if False:
    # A bunch of code

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

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

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

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

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

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

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

лично в моем стиле комментировать, скажем, 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), который позволяет мне выделять строки, а затем вставляет # в первую строку каждой строки. Подобный макрос удаляет#. некоторые могут спросить, почему требуется многострочный, но он пригодится, когда вы пытаетесь "отключить" блок кода для целей отладки.

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

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

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

Это всего лишь догадка .. но

поскольку они являются строками, они имеют некоторое семантическое значение (компилятор не избавляется от них), поэтому имеет смысл использовать их в качестве 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 = '''

и

'''

Comments

    Ничего не найдено.