Есть ли способ создания многострочных комментариев в Python?

1157

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

/*

*/

Я пробовал это в Python, но он выдает ошибку, так что это, вероятно, не правильный путь. Есть ли в Python функция многострочных комментариев?

Dungeon Hunter
источник
2
Я полагаю, что интерпретируемый язык имеет смысл, как и в случае с sh или bash или zsh, это #единственный способ комментировать. Я предполагаю, что таким образом легче интерпретировать скрипты Python.
Виктор Заманян
1
Я знаю, что этот ответ старый, но я столкнулся с ним, потому что у меня был тот же вопрос. Принятый ответ работает, хотя я не знаю достаточно Python, чтобы понять тонкости того, почему он может быть неправильным (согласно ADTC).
Брэндон Барни
5
@BrandonBarney Позвольте мне объяснить вам проблему. Принятый ответ, который использует '' ', фактически создает многострочную строку, которая ничего не делает. Технически это не комментарий. Например, вы можете написать k = '' 'поддельный комментарий, настоящая строка' ''. Затем напечатайте (k), чтобы увидеть, что означает ADTC.
pinyotae
3
Это имеет гораздо больше смысла сейчас. Я привык к VBA, где создание неиспользуемой строки приводит к ошибке. Я не понял, питон просто игнорирует это. Это все еще работает для отладки и обучения, по крайней мере, но не является хорошей практикой для реального развития.
Брэндон Барни
В исходном коде Python, если вы разбиваете длинную строку, редактор автоматически делает отступ, чтобы показать, что ломаная строка действительно является частью предыдущей строки? Это то, что я должен делать, если я разрываю длинную строку псевдокода?
alpha_989

Ответы:

1803

Вы можете использовать строки в тройных кавычках. Когда они не являются строкой документации (первым делом в классе / функции / модуле), они игнорируются.

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

(Удостоверьтесь, что отступ ведущий '''соответствующим образом, чтобы избежать IndentationError.)

Гвидо ван Россум (создатель Python) написал это как «профессиональный совет».

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

Петр Викторин
источник
17
Гектометр Я добавил огромную многострочную строку в скрипт Python, test.pyчтобы увидеть. Когда я делаю import test, test.pycфайл генерируется. К сожалению, pycфайл огромен и содержит всю строку в виде простого текста. Я что-то неправильно понимаю, или этот твит неверен?
unutbu
23
@unutbu, если это была единственная вещь в файле, это была строка документации. Поместите некоторый код перед ним, и он исчезнет из pyc. Я отредактировал ответ и поместил «модуль» в список вещей, в которых есть строки документации.
Петр Викторин
32
Мне не нравятся многострочные строки в качестве комментариев. Подсветка синтаксиса помечает их как строки, а не как комментарии. Мне нравится использовать приличный редактор, который автоматически занимается закомментированием областей и переносом многострочных комментариев при наборе текста. Конечно, это дело вкуса.
Свен Марнах
61
Как соглашение, я считаю полезным использовать """для строк документации и '''для комментариев блока. Таким образом, вы можете обернуть '''ваши обычные строки документов без конфликтов.
Рошамбо
19
Хотя вы можете использовать многострочные строки в качестве многострочных комментариев, я удивлен, что ни один из этих ответов не относится к подразделу PEP 8, в котором конкретно рекомендуется составлять многострочные комментарии из последовательных однострочных комментариев с пустыми #строками для различения абзацев ,
эфир
82

Python имеет многострочный синтаксис строки / комментария в том смысле, что если он не используется в качестве строки документации, многострочные строки не генерируют байт-код - так же, как и #предварительно добавленные комментарии. По сути, это действует как комментарий.

С другой стороны, если вы говорите, что это поведение должно быть задокументировано в официальной документации, чтобы быть истинным синтаксисом комментариев, тогда да, вы были бы правы, если бы сказали, что это не гарантируется как часть спецификации языка.

В любом случае ваш текстовый редактор также должен иметь возможность легко закомментировать выбранный регион (путем размещения #перед каждой строкой по отдельности). Если нет, переключитесь на текстовый редактор, который делает.

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

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


Чтобы защитить от потери ссылок, вот содержание твита Гвидо ван Россума :

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

unutbu
источник
3
строка с тройными кавычками ('' ') действительно работает для выполнения многострочных комментариев.
Варун Бхатия
Спасибо. Использовали ('' ') и ("" "), чтобы закомментировать блок, но это не помогло мне для приложений Django. Поэтому выбрал IDLE, и есть варианты, такие как Комментарий за регион и Раскомментировать области (сочетание клавиш: Alt + 3 и Alt + 4 соответственно) в меню Формат . Теперь это стало проще, чем когда-либо ..
Саурав Кумар
Вы также должны рассмотреть возможность использования IDE. Да, они здоровенные, но при правильном использовании они действительно могут увеличить время кодирования. Я лично использовал PyDev, а теперь использую PTVS (с visual studio). Я бы определенно рекомендовал PTVS, так как с ним действительно приятно работать, он содержит перечисленные выше функции и многое другое - прямую интеграцию с virtualenvs и действительно хорошую отладку, если не сказать больше
Sbspider
2
@HappyLeapSecond Я думаю, вы должны уточнить это, сказав: «Python не имеет истинного многострочного синтаксиса комментариев, но поддерживает многострочные строки, которые можно использовать в качестве комментариев».
ADTC
3
Что я хочу, так это простой способ закомментировать целые блоки кода при тестировании. Другие языки делают это легко. Питон это просто боль.
Альберт Годфринд
45

Из принятого ответа ...

Вы можете использовать строки в тройных кавычках. Когда они не являются строкой документации (первым делом в классе / функции / модуле), они игнорируются.

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

Если вы попытаетесь запустить этот код ...

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
   """
SomeAnonymousPerson
источник
20
тройные кавычки - это способ вставить текст, который ничего не делает (я думаю, вы могли бы сделать это и с обычными строками в одинарных кавычках), но они не являются комментариями - интерпретатор действительно выполняет строку (но строка не ничего не делать). Вот почему отступ в тройном кавычке «комментарий» важен.
Демис
13
Это неверное решение, weather2комментарий на самом деле является строкой документации, так как это первое в классе.
Кен Уильямс
Согласитесь с @KenWilliams. Это не правильное решение. Попробуйте поместить это в середину функции / класса и посмотрите, как это портит ваше форматирование и автоматизирует свертывание / отрисовку кода.
alpha_989,
25

AFAIK, Python не имеет блочных комментариев. Для комментирования отдельных строк вы можете использовать #символ.

Если вы используете Notepad ++ , есть ярлык для комментирования блоков . Я уверен, что другие, как gVim и Emacs, имеют схожие функции.

Санджай Т. Шарма
источник
2
это неверно, см. ответы об использовании тройных кавычек.
Фернандо Гонсалес Санчес
10
@FernandoGonzalezSanchez: Это действительно не так. Эту «многострочную строку как комментарий» лучше всего описать как «подсказка». Официальные документы Python ничего не говорят по этому поводу, поэтому вопрос, заданный OP.
Санджай Т. Шарма
8
Это PEP для строк документации; на этой странице нет ни одного упоминания о «комментарии».
Санджай Т. Шарма,
12

Я думаю, что нет, за исключением того, что многострочная строка не обрабатывается. Однако большинство, если не все Python IDE, имеют ярлык для «закомментирования» нескольких строк кода.

Анти-Земля
источник
11

Если вы оставите комментарий в

"""
long comment here
"""

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

# Long comment
# here.

Если вы используете Vim , вы можете использовать плагины, такие как commentary.vim , чтобы автоматически комментировать длинные строки комментариев, нажав Vjgcc. Где Vjвыбирает две строки кода и gccкомментирует их.

Если вы не хотите использовать плагины, как указано выше, вы можете использовать поиск и заменить как

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

Это заменит первый символ в текущей и следующей строке #.

alpha_989
источник
8

Нет такой функции, как многострочный комментарий. #это единственный способ комментировать одну строку кода. Многие из вас ответили на комментарий как это решение.

Кажется, это работает, но внутренне '''в Python принимает строки, заключенные в обычные строки, которые интерпретатор не игнорирует при использовании комментариев #.

Проверьте официальную документацию здесь

РАТАН КУМАР
источник
5

К сожалению, строковое преобразование не всегда может быть использовано как комментарий! Поэтому безопаснее придерживаться стандарта, добавляющего каждую строку с #.

Вот пример:

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

test2 = [1, 2, '''3, 4,'''] # test2 contains 2 integers **and the string** '3, 4,'
d.nedelchev
источник
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)

Все, что заключено между, """будет прокомментировано.

Если вы ищете однострочные комментарии, тогда это так #.

K_holla
источник
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)

Привет

Мир

Заключите текст в тройные двойные кавычки для поддержки строки документации.

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 "

Multiline:

"""
A sample
multiline comment
on PyCharm
"""
AG
источник
2
Вы говорите, что одинарные кавычки создают комментарий в Python 2.7?
Mcalex
3
Использование одного набора кавычек создает строку. Однострочный комментарий должен начинаться с префикса #.
Йоханно
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 имеет функцию документирования строк (или строк документации). Это дает программистам простой способ добавления быстрых заметок с каждым модулем, функцией, классом и методом 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
Мерин
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
Jojo
источник
Разве это не должно быть " lang-bash" вместо " bash" для подсветки синтаксиса? В любом случае, это обычно выглядит странно (например, для «Some» ) - даже если это на самом деле команды командной строки с параметрами. lang-none(подсветка синтаксиса отключена) может быть лучшим выбором.
Питер Мортенсен
@PeterMortensen спасибо за указание на странную подсветку нашего! Пошел с "lang-none".
Jojo
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.")
0m3r
источник
0

Многострочный комментарий на самом деле не существует в Python. Приведенный ниже пример состоит из неназначенной строки, которая проверяется Python на наличие синтаксических ошибок.

Несколько текстовых редакторов, таких как Notepad ++ , предоставляют нам ярлыки для комментирования написанного фрагмента кода или слов.

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- это ярлык в Notepad ++ для блокировки комментариев. Это добавляет #перед каждой строкой под выбором. Ctrl+ Shift+ Kдля блочных комментариев.

Ты знаешь кто я
источник
0

Среди других ответов, я считаю, что самый простой способ - это использовать функции комментариев IDE, которые поддерживают Python комментарии #.

Я использую Anaconda Spyder и он имеет:

  • Ctrl+ 1- Комментарий / раскомментировать
  • Ctrl+ 4- Комментировать блок кода
  • Ctrl+ 5- раскомментировать блок кода

Было бы закомментировать / раскомментировать одну / несколько строк кода с #.

Я считаю это самым простым.

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

# =============================================================================
#     Sample Commented code in spyder
#  Hello, World!
# =============================================================================
aniltilanthe
источник
Спасибо @PeterMortensen за редактирование :)
aniltilanthe
-2

Выберите строки, которые вы хотите комментировать, а затем используйте Ctrl+, ?чтобы комментировать или раскомментировать код Python в Sublime Text редакторе .

Для одной строки вы можете использовать Shift+ #.

Тарджит Сингх
источник