Чому Python не має багаторядкових коментарів?


252

Гаразд, я знаю, що рядки з трьома цитатами можуть слугувати як багаторядкові коментарі. Наприклад,

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

і

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

Але технічно кажучи це рядки, правда?

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


8
Якщо ви можете зробити це як рядок, навіщо додавати більше способів?
Броди

12
Просто хотів додати, що це не вдається, якщо трапляється те, що ви намагаєтесь коментувати, також є коментарі / багаторядкові рядки. І це, звичайно, тому вони нам потрібні.
nycynik

50
@ S.Lott Я думаю, що це корисне питання. Для того, щоб зрозуміти, чому Python хороший, важливо зрозуміти проектні рішення, які були прийняті (і постійні рішення, які ще приймаються). Питання не є аргументативним чи войовничим; це цікаво. Не потрібно бути таким суворим щодо цікавості.
Марк Е. Хааз

6
Якщо вам потрібен багаторядковий коментар для тріски просто if False:код
AturSams

5
@Brody Оскільки обробляються рядки. Коментарі ігноруються. Існують проблеми з використанням рядків як коментарів. Подивіться навколо :)
ADTC

Відповіді:


266

Сумніваюсь, ви отримаєте кращу відповідь, ніж "Гуйдо не відчував потреби в багаторядкових коментарях".

Гідо написав твіт про це:

Порада Python: Ви можете використовувати багаторядкові рядки як багаторядкові коментарі. Якщо вони не використовуються як docstrings, вони не генерують код! :-)


28
Про це дивіться твіт Гідо .
Петро Вікторін

15
Одним з недоліків поєднання багаторядкових коментарів рядків та блоків є те, що IDE не має уявлення про те, що ви хочете, тому не можна показувати коментарі в іншому стилі за потреби.
Baiyan Huang

21
Це також унеможливлює коментування коду з багаторядкових рядків (і може призвести до помилок відступу, якщо ви не обережні). Ой!
Майк Грехем

3
Я працював у багатьох сферах, де, якщо ваш код містить коментований код, то ваш код буде відхилено, і ви навіть можете запросити оновити своє резюме. Або видаліть не потрібний код, не проблема, якщо код знаходиться під контролем версій, або використовуйте if False:перед кодом, який потрібно вимкнути.
Стів Барнс

4
@SteveBarnes погоджуються, що великі блоки коментованого коду у виробництві погані. Але я не розумію, чому if Falseкраще. Він виконує абсолютно те саме, при цьому є менш зрозумілим (оскільки на перший погляд не так очевидно, що блок коду був відключений).

59

Багаторядкові коментарі легко порушуються. Що робити, якщо у звичайній програмі калькулятора є наступне?

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

Спробуйте прокоментувати це за допомогою багаторядкового коментаря:

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

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


174
Найприємніше в цій відповіді - це те, як вона обробляється підсвічувачем синтаксису SO.
Ніцше-джоу

73
Це одна з багатьох причин, чому у нас є символи втечі, я не вважаю це причиною НЕ мати підтримки для багаторядкових коментарів.
Наталі Адамс

34
Я не розумію вашої логіки - можливо, мій коментар був недостатньо чітким. Якщо ми використовували \ як символ втечі: print ("Виберіть операцію: + - * \ /") "* /" більше не позначає блок, що закінчується, як буквально / буде надруковано. Вперед і протестуйте це на C ++. Насправді підсвітка синтаксису SO покаже, що це дійсно. Це не складна тема, вона існувала роками в інших мовах. Я б попросив вас оновити свою публікацію, щоб вона включала використання символів втечі, щоб показати, що ви можете використовувати "* /" у своєму коді.
Наталі Адамс

23
що робити, якщо ваш код містить "" ". oops, ваш код містить обмежувач кінцевого коментаря
siamii

21
Багаторядкові коментарі по суті не є руйнівними; Просто більшість реалізацій з них є (включаючи Python). Очевидний спосіб робити багаторядкові коментарі в Python, на мій погляд, - це просто дозволити мені почати блок коментарів #:і використовувати відступ, щоб показати, коли коментар закінчився. Він чистий, стійкий і справляється з гніздом ідеально.
ГейтсДА

34

Текст з потрійним цитуванням НЕ слід вважати багаторядковими коментарями; за умовою вони є докстрингами . Вони повинні описувати, що робить ваш код і як ним користуватися, але не для таких речей, як коментування блоків коду.

За словами Гвідо, багатолінійні коментарі в Python - це просто суміжні однорядкові коментарі (пошук "блокувати коментарі").

Для коментування блоків коду я іноді використовую таку схему:

if False:
    # A bunch of code

6
Здається, з тих пір Гвідо обдумував свою думку .
Петро Вікторін

5
що стосується рішення "if false:", річ у тому, що в python, як він працює з вкладками, вам доведеться вкласти весь код під "if False:". І відкрутити шматок згодом. Тож вам доведеться бути досить вишуканим із текстовим редактором.
барлоп

3
якщо ви користуєтесь гідним редактором, це має бути стільки ж часу, скільки і * /
AturSams

@barlop yup - дізнайся своїх редакторів! Це, як правило, досягається за секунду in vim зV}>>
Триптих

30

Це, ймовірно, повертається до основної концепції, що повинен бути один очевидний спосіб виконати завдання. Додаткові стилі коментарів додають зайвих ускладнень і можуть зменшити читабельність.


8
Це питання, я вважаю: використання рядка як коментаря не очевидно і порушує принцип "одного способу виконання завдання", оскільки є два способи робити коментарі: рядки та #.
ГейтсДА

1
Але це не суттєво відрізняється від того, що у вас на мовах на базі С: / * vs //, тому я не бачу, наскільки це значно гірше.
Бен Робертс

//, Поміркуйте, ЧОМУ хтось захоче багаторядкового коментаря. Важливі причини: ... я не можу реально думати про будь-що, що виходить за те, що "мені не потрібно вводити стільки цих # doohickeys" і "мені потрібно відображати цей конкретний коментар дуже точно, і цей точний спосіб не робить "не допускати попереднього #." Скажімо, хтось хоче зробити діаграму ASCII або поставити якийсь опорний код JavaScript, який потрібно скопіювати та вставити, якщо виникає конкретна проблема. Один очевидний спосіб виконати завдання тут не охоплює крайніх випадків цього завдання. Я погоджуюся, що додаткові стилі коментування - BAD.
Натан Басанес

3
"Мені не потрібно вводити стільки цих # дойхікі". Саме тому майже всі мови мають блокові коментарі (/ * .. * /). Вірите чи ні, але мені подобається документувати те, що робить мій код: входи, виходи, використовувані алгоритми, параметри ... Це багато тексту, який також змінюється. Обмеження лише однорядними коментарями є просто смішним. Зауважте, що Я НЕ виступаю за підхід до коментування коду - хоча це часто зручно при спробі альтернативних підходів, доки добре зрозумілі можливі побічні ефекти.
Альберт Годфрінд

3
Інша річ, яку я обурюю щодо python, - це те, що це по суті мова, розроблена людиною. Що б не сказав Гуїдо, це правда ... Отже, ми маємо всі ці дивні несумісності між мовними версіями. Чому? Тому що Гвідо так сказав ...
Альберт Годфрінд

12

Ну, потрійні лапки використовуються як багаторядкові коментарі в документах. І # коментарі використовуються як вбудовані коментарі, і люди користуються ним.

Більшість мов скриптів також не мають багаторядкових коментарів. Може, в цьому причина?

Див. PEP 0008 , розділ Коментарі

І подивіться, чи пропонує ваш редактор Python якийсь ярлик клавіатури для блокування коментування. Emacs підтримує це, як і Eclipse, імовірно, більшість гідних IDE.



5

Особисто мій стиль коментаря у скажімо, Java схожий

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

Тож мати лише однорядкові коментарі - це не так вже й погано, якщо ваш стиль є типовим для попереднього прикладу, оскільки в порівнянні ви мали б

#
# My multi-line comment in Python
#

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

'
' This is a VB.NET example
'

Однорядкові коментарі в кінцевому підсумку мають меншу кількість символів, ніж багаторядкові коментарі, і менше шансів на те, що деякі ухилисті символи можуть уникнути у виразному вираженні, можливо? Я схильний би погодитися з Недом.



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

Використовуйте блок коментарів або шукайте та замініть (s / ^ / # / g) у своєму редакторі, щоб досягти цього.


3

Я вирішив це, завантаживши макрос для мого текстового редактора (TextPad), який дозволяє мені виділяти рядки, а потім він вставляє # у першому з кожного рядка. Подібний макрос видаляє #. Деякі можуть запитати, чому потрібен багаторядковий, але це стане в нагоді, коли ви намагаєтесь "вимкнути" блок коду для налагодження.


1

Для всіх, хто шукає багаторядкові коментарі в Python - використання формату потрійних цитат може мати певні проблемні наслідки, оскільки я щойно навчився важкому шляху. Врахуйте це:

this_dict = {
    'name': 'Bob',

"""
This is a multiline comment in the middle of a dictionary
"""

    'species': 'Cat'
}

Багаторядковий коментар буде вкладений у наступний рядок, псуючи 'species'ключ. Краще просто використовувати #для коментарів.


0

Оскільки # конвенція є загальною, і насправді нічого не можна зробити з багаторядковим коментарем, що не можна з коментарем # -підпис. Це історична випадковість, подібно до назви /* ... */коментарів, що повертаються до PL / I,


0

Припустимо, що їх просто вважали непотрібними. Оскільки просто так просто набирати текст#a comment , багаторядкові коментарі можуть просто складатися з багатьох однорядкових коментарів.

З іншого боку, для HTML є потреба в мультилінерах. Важче продовжувати друкувати <!--comments like this-->.


4
Це не сенс - є очевидні випадки використання як однорядних, так і багаторядкових коментарів. Я їх широко використовував і в інших мовах (хоча я знаю, що пуристи не цікавляться іншими мовами). ;)
johndodo

1
спробуйте зробити це з 200 рядків коду, які вам доведеться вийняти, поставити назад, а потім вийняти знову. Введення 200 початкових # швидко старіє.
DragonLord

0

Це лише здогадка .. але

Оскільки вони є рядками, вони мають деяке смислове значення (компілятор не позбавляється від них), тому має сенс використовувати їх як docstrings. Вони фактично стають частиною AST , тому витяг документації стає простішим.


0

Крім того, багатолінійні коментарі - сука . Вибачте, але незважаючи на мову, я не використовую їх ні для чого іншого, ніж для налагодження. Скажіть, у вас такий код:

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

Тоді ви дізнаєтесь, що у вашому коді є щось, що ви не можете виправити за допомогою налагоджувача, тому ви починаєте вручну налагоджувати його, коментуючи все менші та менші шматки коду за допомогою цих багатолінійних коментарів. Потім це дасть функцію:

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

Це дійсно дратує.


3
ну чудово, але у Python немає /*коментарів у стилі.
Триптих

17
Правильно, оскільки python не має реальних багатолінійних коментарів, начебто було важко наводити приклади в python.
martiert

2
Я особисто не розумію проблеми. Просто видаліть зайвий * /. Або використовуйте //, щоб коментувати окремі рядки, якщо вам потрібно бути точними.
Наталі Адамс

4
Існує кілька мов (багато з яких функціональні з будь-якої причини), які дозволяють вкладати коментарі. Шукайте "вкладені" в rosettacode.org/wiki/Коменти для прикладів.
Кіт

1
ну так, було б дратувати розміщення багаторядкового коментаря в багаторядковому коментарі. І хоча я запам’ятовую лише частину своєї програми за один раз, я принаймні пам’ятаю, яку частину своєї програми я переглядаю і яку я прокоментував. Але якщо ви навіть не можете цього пам’ятати, то ви можете використовувати той факт, що деякі ІДЕ роблять курсив, що є коментарем. У будь-якому випадку, очевидно, для такої крихітної функції ви можете також використовувати однорядкові коментарі. Але якщо коментувати велику частину програми, вам дійсно потрібен багаторядковий коментар. або текстовий редактор із цією функцією.
барлоп

0

Багаторядкові коментарі за допомогою IDLE на:

  • Mac OS X , після вибору коду, коментує блок коду з Ctrl+ 3та відмежуючи за допомогою Ctrl+ 4.

  • Після вибору коду Windows коментує блок коду з Ctrl+ Alt+ 3та відміняє, використовуючи Ctrl+ At+ 4.


-1

Я пам’ятаю, як читав про одного хлопця, який розмістив свої багаторядкові коментарі в потрійну зміну:

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

Це займає трохи пам’яті, але це дає багатофункціональну функцію коментування, а також більшість редакторів виділить для вас синтаксис :)

Також легко коментувати код, просто загорнувши його

x = '''

і

'''

18
видаліть x =і він не займає жодної пам'яті.
ендоліт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.