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

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

/* 

*/

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

30 ответов

Решение

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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()

В 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
   """

Я надеюсь, что это помогает!

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

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

Нет такой возможности многострочного комментария. # - единственный способ комментировать одну строку кода. Многие из вас ответили на комментарий как это решение. Хотя это, кажется, работает, но внутри '' 'в Python строки заключены в обычные строки, которые интерпретатор не игнорирует, как комментарий, используя #.

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

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

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

"""
long comment here
"""

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

# long comment
# here.

Если вы используете vimВы можете подключить плагины, такие как https://github.com/tpope/vim-commentary, чтобы автоматически закомментировать длинные строки комментариев, нажав Vjgcc, куда Vj выбирает 2 строки кода и gcc комментирует их.

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

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

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

VS Code универсальный официальный многострочный комментарий.

MacOS: Выберите код-блок затем +/

Windows: выберите кодовый блок, затем Ctrl+/

Я бы не советовал использовать """ для многострочных комментариев!

Вот простой пример, чтобы выделить то, что можно считать неожиданным поведением:

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

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

Вот пример:

test1 = [1, 2, 3, 4,] # test1 содержит 4 целых числа

test2 = [1, 2, '''3, 4,'''] # test2 содержит 2 целых числа и строку '3, 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)

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

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

Многострочный комментарий в 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)

Если вы пишете комментарий в строке с кодом, вы должны написать комментарий, оставив 2 пробела перед знаком # и 1 пробел перед знаком #

print("Hello World")  # printing

Если вы пишете комментарий с новой строки, вы должны написать комментарий, оставив 1 пробел kn в знаке #

# single line comment

Чтобы писать комментарии длиннее 1 строки, используйте 3 кавычки

"""
This is a comment
written in
more than just one line
"""

Встроенные комментарии в python начинаются с хеш-символа.

hello = "Hello!" # this is 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 params and
docstrings here.
'''

На Python 2.7.13:

Не замужем:

"A sample single line comment "

Multiline:

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

Использование 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.")

Как комментировать:

'''
   Comment what you want here
'''

или же

 """
    Comment what you want here
 """

Да, это нормально использовать оба

'''
Comments
'''

а также

""" 
Comments
"""

Но единственное, что вы все должны помнить при работе в IDE, вы должны "ЗАПУСТИТЬ" весь файл, чтобы принять его в виде многострочных кодов. Строка за строкой "RUN" не будет работать должным образом и будет отображать ошибку.

Это можно сделать в текстовом редакторе Vim.

Перейти к началу первой строки в области комментариев.

Нажмите Ctrl+V, чтобы войти в визуальный режим.

С помощью клавиш со стрелками выберите все строки для комментирования.

Нажмите Shift+I.

Нажмите # (или Shift+3).

Нажмите Esc.

Да, вы можете просто использовать

      '''
Multiline!
(?)
'''

или

      """
Hello
World!
"""

БОНУС: это немного сложнее, но безопаснее использовать в старых версиях.printфункции или графические интерфейсы:

      # This is also
# a multiline comment.

Для этого вы можете выбрать текст, который хотите прокомментировать, и нажать (или), в PyCharm и VS Code .

Но вы можете их редактировать. Например, вы можете изменить ярлык с/кCtrl Shift C.

ПРЕДУПРЕЖДЕНИЕ!

  1. Будьте осторожны, не перезаписывайте другие ярлыки!
  2. Комментарии должны иметь правильный отступ!

Надеюсь, этот ответ помог. Удачи в следующий раз, когда вы напишете другие ответы!

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

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

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

Он будет комментировать / раскомментировать одну / несколько строк кода с помощью #.

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

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

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

Для комментирования нескольких строк кода в Python нужно просто использовать # однострочный комментарий к каждой строке:

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

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

'''
This is
multiline
comment
'''

Также отметим, что вы можете получить доступ к docstring с помощью объекта класса, подобного этому

myobj.__doc__

Вы можете использовать следующее. Это называется 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__

Выберите строки, которые вы хотите прокомментировать, а затем используйте "CTRL +?" комментировать или раскомментировать код Python в превосходном редакторе. Для одной строки вы можете использовать 'Shift + #'.

в окнах: вы также можете выделить фрагменты текста или кода и нажатьctr + /и сделайте то же самое, если хотите удалить комментарии. в Mac: должно бытьcomment + /

Многострочный комментарий на самом деле не существует в 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 - для раскомментирования блока.

'''Многострочные комментарии начались ЗДЕСЬ

import tkinter as tk
root = tk.Tk()
w = tk.Label( text="Hello Tkinter")

logo = tk.PhotoImage(file="Python.PNG")

w1 = tk.Label(root, image=logo).pack(side="right")
explanation = """At Present, only GIF and PPM/PGM are supported but am
trying it with PNG. Interface does exit to allow image file to be added easily."""

w2 = tk.Label(root, justify=tk.LEFT,padx = 0, text=explanation).pack(side="left")
root.mainloop()

'''Многострочный комментарий заканчивается ЗДЕСЬ.. означает, что приведенный выше код не будет выполняться и является комментарием

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

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

"" "печать (" истинный результат ")

"" "

Я прочитал обо всех недостатках различных способов сделать это, и я придумал этот способ, пытаясь установить все флажки:

      block_comment_style = '#[]#'
'''#[
class ExampleEventSource():
    def __init__(self):
        # create the event object inside raising class
        self.on_thing_happening = Event()

    def doing_something(self):
        # raise the event inside the raising class
        self.on_thing_happening()        
        
        
class ExampleEventHandlingClass():
    def __init__(self):
        self.event_generating_thing = ExampleEventSource()
        # add event handler in consuming class
        event_generating_thing.on_thing_happening += my_event_handler
        
    def my_event_handler(self):
        print('handle the event')
]#'''


class Event():
 
    def __init__(self):
        self.__eventhandlers = []
 
    def __iadd__(self, handler):
        self.__eventhandlers.append(handler)
        return self
 
    def __isub__(self, handler):
        self.__eventhandlers.remove(handler)
        return self
 
    def __call__(self, *args, **keywargs):
        for eventhandler in self.__eventhandlers:
            eventhandler(*args, **keywargs)

Плюсы

  1. Для любого другого программиста очевидно, что это комментарий. Это самоописательно.
  2. Он компилирует
  3. Он не отображается как комментарий документа вhelp()
  4. При желании он может быть в верхней части модуля.
  5. Это можно автоматизировать с помощью макроса.
  6. [Комментарий] не является частью кода. Это не заканчивается вpyc. (Кроме одной строки кода, которая включает плюсы №1 и №4)
  7. Если бы в Python когда-либо был добавлен синтаксис многострочных комментариев, файлы кода можно было бы исправить с помощью поиска и замены. Просто используя'''не имеет этого преимущества.

Минусы

  1. Трудно вспомнить. Много печатать. Этот минус можно устранить с помощью макроса.
  2. Это может сбить с толку новичков, думая, что это единственный способ делать блочные комментарии. Это может быть профи, просто зависит от вашей точки зрения. Это может заставить новичков подумать, что строка кода волшебным образом связана с комментарием «работает».
  3. Он не раскрашивается как комментарий. Но опять же, ни один из ответов, которые действительно касаются духа вопроса ОП, не будет.
  4. Это не официальный способ, так чтоPylintможет пожаловаться на это. Я не знаю. Может быть; возможно, нет.

Вот попытка макроса VS Code, хотя я еще не тестировал его:

      {
    "key": "ctrl+shift+/",
    "command": "editor.action.insertSnippet",
    "when": "editorHasSelection"
    "args": {
        "snippet": "block_comment_style = '#[]#'\n'''#[{TM_SELECTED_TEXT}]#'''"
    }
}
Другие вопросы по тегам