Подтвердить что ты не робот

Почему python использует нетрадиционные тройные кавычки для комментариев?

Почему python просто не использовал традиционный стиль комментариев, например, C/С++/Java:

/**
 * Comment lines 
 * More comment lines
 */

// line comments
// line comments
//

Есть ли конкретная причина для этого или это просто произвольно?

4b9b3361

Ответ 1

Python не использует тройные кавычки для комментариев. Комментарии используют символ hash (a.k.a. фунт):

# this is a comment

Тройная цитата - это строка doc и, в отличие от комментария, фактически доступна в виде реальной строки для программы:

>>> def bla():
...     """Print the answer"""
...     print 42
...
>>> bla.__doc__
'Print the answer'
>>> help(bla)
Help on function bla in module __main__:

bla()
    Print the answer

Не обязательно использовать тройные кавычки, если это строка. Использование """ - это просто соглашение (и имеет преимущество в том, что оно является многострочным).

Ответ 2

Ряд ответов получил множество точек, но не дают полного представления о том, как все работает. Подводя итог...

# comment заключается в том, как Python делает фактические комментарии (похожие на bash и некоторые другие языки). У Python есть только комментарии "до конца строки", у него нет явной многострочной оболочки комментариев (в отличие от javascript /* .. */). Большинство Python IDE позволяют вам выбирать и комментировать блок за раз, это то, как многие люди справляются с этой ситуацией.

Затем существуют обычные однострочные строки python: они могут использовать кавычки ' или " (например, 'foo' "bar"). Основное ограничение заключается в том, что они не переносятся на несколько строк. Для того, что для многострочных строк: Это строки, окруженные тройными одиночными или двойными кавычками (''' или """) и завершаются только тогда, когда найден соответствующий неизолированный терминатор. Они могут продолжаться столько строк, сколько необходимо, и включать все промежуточные пробелы.

Любой из этих двух типов строк определяет полностью нормальный строковый объект. Им может быть присвоено имя переменной, к ним применяются операторы и т.д. После анализа не существует различий между любыми форматами. Однако есть два особых случая, основанных на том, где строка и как она используется...

Во-первых, если строка только что записана, без каких-либо дополнительных операций и не назначена переменной, что с ней происходит? Когда код выполняется, голая строка в основном отбрасывается. Таким образом, людям было удобно комментировать большие биты кода python, используя многострочные строки (предоставляя вам избежать любых внутренних многострочных строк). Это не так часто или семантически правильно, но это разрешено.

Второе использование заключается в том, что любые такие голые строки, которые следуют сразу после def Foo(), class Foo() или начала модуля, рассматриваются как строка, содержащая документацию для этого объекта, и сохраняются в атрибуте __doc__ объекта. Это наиболее распространенный случай, когда строки могут показаться, что они являются "комментарием". Разница в том, что они выполняют активную роль как часть анализируемого кода, хранятся в __doc__... и в отличие от комментария, их можно прочитать во время выполнения.

Ответ 3

Тройные кавычки не являются комментариями. Они строковые литералы, которые охватывают несколько строк и включают эти разрывы строк в результирующей строке. Это позволяет использовать

somestr = """This is a rather long string containing
several lines of text just as you would do in C.
    Note that whitespace at the beginning of the line is\
 significant."""

вместо

somestr = "This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
    Note that whitespace at the beginning of the line is\
 significant."

Ответ 4

Большинство языков сценариев используют # в качестве маркера комментария, чтобы автоматически пропускать shebang (#!), который указывает загрузчику программы, которую выполняет интерпретатор (например, в #!/bin/ bash). В качестве альтернативы интерпретатору может быть дано указание автоматически пропустить первую строку, но удобнее просто определить # как маркер комментария и что он, поэтому он пропустил как следствие.

Ответ 5

Гвидо - создатель Python, на самом деле взвешивает тему здесь: https://twitter.com/gvanrossum/status/112670605505077248?lang=en

В итоге - для многострочных комментариев просто используйте тройные кавычки. Для академических целей - да, технически это строка, но она игнорируется, потому что она никогда не используется или не присваивается переменной.