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


1156

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

/*

*/

Я спробував це в Python, але це видає помилку, тому це, мабуть, не правильний спосіб. Чи дійсно в Python є функція багаторядкових коментарів?


2
Я вважаю, що мова з інтерпретацією має сенс, як і у випадку з sh або bash або zsh, #це єдиний спосіб коментувати. Я здогадуюсь, що це полегшує інтерпретацію сценаріїв Python таким чином.
Віктор Заманян

1
Я знаю, що ця відповідь стара, але я натрапив на неї, тому що у мене було те саме питання. Прийнята відповідь НЕ працює, хоча я не знаю достатньо Python, щоб знати тонкощі, чому це може бути неправильно (за ADTC).
Брендон Барні

5
@BrandonBarney Дозвольте мені пояснити вам проблему. Прийнята відповідь, яка використовує '' ', фактично створює багаторядковий рядок, який нічого не робить. Технічно це не коментар. Наприклад, ви можете написати k = '' 'підроблений коментар, справжній рядок' ''. Потім надрукуйте (k), щоб побачити, що означає ADTC.
pinyotae

3
Це має тепер набагато більше сенсу. Я звик до vba, де створення невикористаного рядка призводить до помилки. Я не усвідомлював, що пітон просто ігнорує це. Він як і раніше працює для налагодження та навчання хоча б, але не є хорошою практикою для фактичного розвитку.
Брендон Барні

У вихідному коді Python, якщо ви перервете довгий рядок, редактор автоматично відступає від нього, щоб показати, що зламана лінія насправді є частиною попереднього рядка? Це те, що я повинен робити, якщо розбиваю довгий рядок псевдокоду?
alpha_989

Відповіді:


1802

Можна використовувати рядки з потрійним цитуванням. Коли вони не є docstring (перше, що в класі / функції / модулі), вони ігноруються.

'''
This is a multiline
comment.
'''

(Обов’язково '''належним чином відзначте відступ, щоб уникнути IndentationError.)

Гвідо ван Россум (творець Python) твітнув це як "підказку".

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


17
Гм. Я помістив величезну багаторядкову рядок у сценарій python, test.pyщоб побачити. Коли я це роблю import test, test.pycгенерується файл. На жаль, pycфайл величезний і містить увесь рядок у вигляді простого тексту. Я щось не розумію, чи цей твіт невірний?
unutbu

23
@unutbu, якщо це було єдине, що у файлі, це була docstring. Поставте перед цим якийсь код, і він зникне з pyc. Я відредагував відповідь і поставив „модуль” до списку речей, які мають доктрини.
Петро Вікторін

31
Мені не подобається багаторядковий рядок як коментарі. Підсвічування синтаксису позначає їх як рядки, а не як коментарі. Мені подобається використовувати гідний редактор, який автоматично займається коментуванням регіонів та загортанням багаторядкових коментарів під час введення тексту. Звичайно, це питання смаку.
Sven Marnach

61
Як конвенція, мені здається корисним використовувати """для docstrings та '''для блокування коментарів. Таким чином, ви можете обернутись '''навколо своїх звичних доктрин без конфлікту.
Рошамбо

19
Хоча ви можете використовувати багаторядкові рядки як багаторядкові коментарі, я здивований, що жоден з цих відповідей не стосується підрозділу PEP 8, який спеціально рекомендує будувати багаторядкові коментарі з послідовних однорядних коментарів, з порожніми #рядками для розрізнення абзаців .
Повітря

82

У Python є синтаксис багаторядкових рядків / коментарів у тому сенсі, що, якщо вони не використовуються як docstrings, багаторядкові рядки не генерують# байтового коду - як і попередні коментарі. Насправді це діє саме як коментар.

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

У будь-якому випадку, ваш текстовий редактор повинен також легко коментувати вибраний регіон (розміщуючи #перед кожним рядком окремо). Якщо ні, перейдіть до текстового редактора, який це робить.

Програмування в Python без певних функцій редагування тексту може бути болючим досвідом. Пошук правильного редактора (і вміння ним користуватися) може істотно змінитись у сприйнятті досвіду програмування Python.

Мало того, що текстовий редактор повинен коментувати вибрані регіони, він також повинен легко переміщувати блоки коду вліво і вправо, і він повинен автоматично розміщувати курсор на поточному рівні відступу при натисканні Enter. Складання коду також може бути корисним.


Щоб захистити від розпаду посилань, ось вміст твіту Гідо ван Россума :

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


3
потрійний цитуваний рядок ('' ') справді працює для виконання багаторядкових коментарів.
Varun Bhatia

Дякую .. Використовували ('' ') і ("" ") для коментування блоку, але це не допомогло мені для додатків Django. Тому вибрали IDLE і є такі варіанти, як коментувати регіон та регіони, що не мають коментарів (ярлик: Alt + 3 та Alt + 4 відповідно) у меню Формат . Тепер це простіше, ніж будь-коли ..
Саурав Кумар

Слід також розглянути можливість використання IDE. Так, вони здоровенні, але при правильному використанні вони можуть дійсно збільшити час кодування. Я особисто використовував PyDev, а зараз використовую PTVS (з візуальною студією). Я б точно рекомендував PTVS, так як це дійсно приємно працювати, що містить перераховані вище функції, а також набагато більше - пряма інтеграція з virtualenvs і, по крайней мере, хороша налагодження - якщо не менше
Sbspider

2
@HappyLeapSecond Я думаю, ви повинні уточнити це, кажучи, що "Python не має справжнього синтаксису багаторядкових коментарів, але підтримує багаторядкові рядки, які можна використовувати як коментарі".
ADTC

3
Те, що я хочу, - це простий спосіб прокоментувати цілі блоки коду під час тестування. Інші мови роблять це просто. Пітон - це просто біль.
Альберт Годфрінд

45

З прийнятої відповіді ...

Можна використовувати рядки з потрійним цитуванням. Коли вони не є docstring (перше, що в класі / функції / модулі), вони ігноруються.

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

Якщо ви спробуєте запустити цей код ...

def parse_token(token):
    """
    This function parses a token.
    TODO: write a decent docstring :-)
    """

    if token == '\\and':
        do_something()

    elif token == '\\or':
        do_something_else()

    elif token == '\\xor':
        '''
        Note that we still need to provide support for the deprecated
        token \xor. Hopefully we can drop support in libfoo 2.0.
        '''
        do_a_different_thing()

    else:
        raise ValueError

Ви отримаєте або ...

ValueError: invalid \x escape

... на Python 2.x або ...

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 79-80: truncated \xXX escape

... на Python 3.x.

Єдиний спосіб робити багаторядкові коментарі, які ігноруються парсером, це ...

elif token == '\\xor':
    # Note that we still need to provide support for the deprecated
    # token \xor. Hopefully we can drop support in libfoo 2.0.
    do_a_different_thing()

Тоді ви можете використовувати r'raw string'- r'\xor' == '\\xor'.
GingerPlusPlus

1
Ну, будь-який "справжній" багаторядковий коментар також повинен бути проаналізований і синтаксично дійсний. Коментарі в стилі C не можуть містити а */, наприклад, це припинить блокування.

1
@ dan1111 очевидно, що коментар не може містити кінцевий маркер, але це єдине обмеження.
el.pescado

14
'''"коментарі" мають більше обмежень. Ви можете коментувати лише цілі висловлювання, тоді як коментарі можуть коментувати частини вираження. Приклад: C, ви можете прокоментувати деякі елементи списку: int a[] = {1, 2, /* 3, 4, */ 5};. З багаторядковим рядком ви не можете цього зробити, оскільки це додасть би рядок всередині вашого списку.
el.pescado

35

У Python 2.7 багаторядковий коментар:

"""
This is a
multilline comment
"""

Якщо ви перебуваєте всередині класу, вам слід правильно його вкласти.

Наприклад:

class weather2():
   """
   def getStatus_code(self, url):
       world.url = url
       result = requests.get(url)
       return result.status_code
   """

20
потрійні лапки - це спосіб вставити текст, який нічого не робить (я вважаю, ви могли це зробити і за допомогою звичайних одно цитуваних рядків), але це не коментарі - інтерпретатор насправді виконує рядок (але рядок не нічого не роблю). Ось чому важливим є відступ трійкового "коментаря".
Деміс

12
Це рішення невірно, weather2коментар насправді є докстрингом, оскільки це перше в класі.
Кен Вільямс

Погодьтеся з @KenWilliams. Це невірне рішення. Спробуйте поставити це посеред функції / класу, і подивіться, як воно заплутує ваше форматування та автоматизацію складання / зв’язування коду.
alpha_989

25

AFAIK, Python не має коментарів до блоку. Для коментування окремих рядків ви можете використовувати #символ.

Якщо ви використовуєте Notepad ++ , є ярлик для блокування коментування . Я впевнений, що такі, як gVim та Emacs, мають подібні функції.


2
це неправильно, див. відповіді на використання потрійних лапок.
Фернандо Гонсалес Санчес

10
@FernandoGonzalezSanchez: Це дійсно неправильно. Цей "рядковий рядок як коментар" найкраще можна охарактеризувати як "підказку". Офіційні документи Python з цього приводу нічого не говорять, звідси постає питання ОП.
Санджай Т. Шарма

8
Це PEP для docstrings; немає жодної згадки про "коментар" на цій сторінці.
Санджай Т. Шарма

12

Я думаю, це не відбувається, за винятком того, що багаторядковий рядок не обробляється. Однак у більшості, якщо не у всіх ідентифікаторів Python є ярлик для «коментування» декількох рядків коду.


11

Якщо ви помістите коментар

"""
long comment here
"""

в середині сценарію Python / лінтери не розпізнають цього. Складання буде зіпсовано, оскільки вищевказаний коментар не є частиною стандартних рекомендацій. Краще використовувати

# Long comment
# here.

Якщо ви використовуєте Vim , ви можете плагіни, як comentar.vim , щоб автоматично коментувати довгі рядки коментарів, натискаючи Vjgcc. Де Vjвибирає два рядки коду та gccкоментує їх.

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

:.,.+1s/^/# /g

Це замінить перший символ у поточному та наступному рядку на #.


8

Немає такої функції, як багаторядковий коментар. #це єдиний спосіб коментувати один рядок коду. Багато з вас відповіли на це питання як коментар.

Це, здається, працює, але всередині '''Python внутрішні рядки приймають укладені рядки як звичайні рядки, які інтерпретатор не ігнорує, як використання коментарів #.

Ознайомтесь з офіційною документацією тут


5

На жаль, струфікацію не завжди можна використовувати як коментування! Тож безпечніше дотримуватися стандартних, попередньо перед кожним рядком знаків "a" #.

Ось приклад:

test1 = [1, 2, 3, 4,]       # test1 contains 4 integers

test2 = [1, 2, '''3, 4,'''] # test2 contains 2 integers **and the string** '3, 4,'

4

Ну, ви можете спробувати це (при запуску цитованих, вхід до першого питання слід цитувати '):

"""
print("What's your name? ")
myName = input()
print("It's nice to meet you " + myName)
print("Number of characters is ")
print(len(myName))
age = input("What's your age? ")
print("You will be " + str(int(age)+1) + " next year.")

"""
a = input()
print(a)
print(a*5)

Що б там не було між """коментованим, буде прокоментовано.

Якщо ви шукаєте однорядкові коментарі, то це #.


3

Багаторядковий коментар у Python:

Для мене працювали і "", і "" ".

Приклад:

a = 10
b = 20
c = a+b
'''
print ('hello')
'''
print ('Addition is: ', a+b)

Приклад:

a = 10
b = 20
c = a+b
"""
print('hello')
"""
print('Addition is: ', a+b)

3

Вбудовані коментарі в Python починаються з хеш-символу.

hello = "Hello!" # This is an inline comment
print(hello)

Привіт!

Зауважте, що хеш-символ у рядковому літералі - це лише хеш-символ.

dial = "Dial #100 to make an emergency call."
print(dial)

Наберіть номер 100, щоб здійснити екстрений виклик.

Хеш-символ також може використовуватися для коментарів в одній або декількох рядках.

hello = "Hello"
world = "World"
# First print hello
# And print world
print(hello)
print(world)

Здравствуйте

Світ

Додайте текст за допомогою потрійних подвійних лапок, щоб підтримати docstring.

def say_hello(name):
    """
    This is docstring comment and
    it's support multi line.
    :param name it's your name
    :type name str
    """
    return "Hello " + name + '!'


print(say_hello("John"))

Привіт Джон!

Додайте текст за допомогою потрійних одиничних лапок для блокових коментарів.

'''
I don't care the parameters and
docstrings here.
'''

2

На Python 2.7.13:

Одномісний:

"A sample single line comment "

Багаторядковий:

"""
A sample
multiline comment
on PyCharm
"""

2
Ви говорите, що окремі цитати створюють коментар у python 2.7?
mcalex

3
Використання єдиного набору лапок створює рядок. Коментар для одного рядка має бути префіксом #.
johanno

2

Універсальний офіційний багаторядковий перемикач коментарів Visual Studio Code .

macOS: виберіть код-код, а потім +/

Windows: Виберіть код-код, а потім Ctrl+/


2

Так, добре використовувати обидва:

'''
Comments
'''

і

"""
Comments
"""

Але, єдине, що вам потрібно пам’ятати, працюючи в IDE, це вам потрібно «РАБОТИ» весь файл, щоб прийняти його як кілька рядків. Рядок за рядком 'RUN' не працює належним чином, і з’явиться помилка.


1

Для коментування декількох рядків коду в Python - це просто використовувати #однорядковий коментар до кожного рядка:

# This is comment 1
# This is comment 2 
# This is comment 3

Для написання «правильних» багаторядкових коментарів у Python є використання багаторядкових рядків із """синтаксисом Python має функцію рядків документації (або docstrings). Це дає програмістам простий спосіб додавання швидких приміток до кожного модуля, функції, класу та методу Python.

'''
This is
multiline
comment
'''

Також згадайте, що ви можете отримати доступ до docstring таким класовим об'єктом

myobj.__doc__

Що це додає до попередніх відповідей?
Пітер Мортенсен

Моя відповідь містить більше деталей, що може більше допомогти розробнику.
шафік

1

Можна скористатися наступним. Це називається DockString.

def my_function(arg1):
    """
    Summary line.
    Extended description of function.
    Parameters:
    arg1 (int): Description of arg1
    Returns:
    int: Description of return value
    """
    return arg1

print my_function.__doc__

"DockString" ? У вас є довідник?
Пітер Мортенсен

@PeterMortensen тут ви переходите datacamp.com/community/tutorials/docstrings-python
merin

1

Я б радив не використовувати """для багаторядкових коментарів!

Ось простий приклад, щоб виділити те, що можна вважати несподіваною поведінкою:

print('{}\n{}'.format(
    'I am a string',
    """
    Some people consider me a
    multi-line comment, but
    """
    'clearly I am also a string'
    )
)

Тепер подивіться на вихід:

I am a string

    Some people consider me a
    multi-line comment, but
    clearly I am also a string

Багаторядковий рядок не розглядався як коментар, але він 'clearly I'm also a string'об'єднувався з формуванням однієї рядка.

Якщо ви хочете коментувати кілька рядків, зробіть це відповідно до вказівок PEP 8 :

print('{}\n{}'.format(
    'I am a string',
    # Some people consider me a
    # multi-line comment, but
    'clearly I am also a string'
    )
)

Вихід:

I am a string
clearly I am also a string

Чи не повинно бути " lang-bash" замість " bash" для виділення синтаксису? У будь-якому випадку це зазвичай виглядає дивно (наприклад, для "Деякі" тут) - навіть якщо це фактично команди командного рядка з параметрами. lang-none(підсвічування синтаксису вимкнено) може бути кращим вибором.
Пітер Мортенсен

@PeterMortensen дякує за вказівку на дивне виділення нашого! Пішов з "lang-none".
жоджо

0

Використання PyCharm IDE.

Можна commentі uncommentрядки коду за допомогою Ctrl + /. Ctrl + / коментує або коментує поточний рядок або кілька вибраних рядків із коментарями в одній лінії ({# in Django templates, or # in Python scripts). Pressing Ctrl+Shift+/для вибраного блоку вихідного коду в шаблоні Django оточує блок {% comment %} and {% endcomment %}тегами.


n = 5
while n > 0:
    n -= 1
    if n == 2:
        break
    print(n)

print("Loop ended.")

Виберіть усі рядки, а потім натисніть Ctrl + /


# n = 5
# while n > 0:
#     n -= 1
#     if n == 2:
#         break
#     print(n)

# print("Loop ended.")

0

Багатоканальний коментар насправді не існує в Python. Наведений нижче приклад складається з непризначеного рядка, який підтверджений Python для синтаксичних помилок.

Кілька текстових редакторів, як-от Блокнот ++ , надають нам ярлики, щоб прокоментувати написаний фрагмент коду чи слова.

def foo():
    "This is a doc string."
    # A single line comment
    """
       This
       is a multiline
       comment/String
    """
    """
    print "This is a sample foo function"
    print "This function has no arguments"
    """
    return True

Також Ctrl+ K- це ярлик у Блокноті ++ для блокування коментарів. Він додає позначку #перед кожним рядком під виділенням. Ctrl+ Shift+ K- для блокування коментарів.


0

Серед інших відповідей я вважаю, що найпростішим способом є використання функцій коментарів IDE, які використовують підтримку коментарів Python #.

Я використовую Anaconda Spyder, і він має:

  • Ctrl+ 1- коментар / коментар
  • Ctrl+ 4- Прокоментуйте блок коду
  • Ctrl+ 5- Відлучення блоку коду

Він буде коментувати / коментувати один / багато рядків коду #.

Мені це найлегше.

Наприклад, блоковий коментар:

# =============================================================================
#     Sample Commented code in spyder
#  Hello, World!
# =============================================================================

Дякуємо @PeterMortensen за редагування :)
aniltilanthe

-2

Виберіть рядки, які ви хочете коментувати, а потім використовуйте Ctrl+, ?щоб коментувати або коментувати код Python в редакторі піднесеного тексту .

Для одного рядка ви можете використовувати Shift+ #.

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