Pythonで複数行コメントを作成する方法はありますか?


1157

最近Pythonの勉強を始めましたが、複数行コメントを実装する方法が見つかりませんでした。ほとんどの言語には次のようなブロックコメント記号があります

/*

*/

これをPythonで試しましたが、エラーが発生するため、これはおそらく正しい方法ではありません。Pythonには実際には複数行コメント機能がありますか?


2
私はインタプリタ言語であるため、sh、bash、またはzshの場合のように、それ#がコメントを書く唯一の方法であると思います。この方法でPythonスクリプトを簡単に解釈できるようになると思います。
ビクターザマニアン2017年

1
この答えは古いのはわかっていますが、同じ質問があったので出会いました。受け入れられた回答は機能しますが、(ADTCごとに)正しくない理由の複雑さを知るのに十分なPythonを知りません。
Brandon Barney

5
@BrandonBarney問題を説明させてください。'' 'を使用する受け入れられた回答は、実際には何もしない複数行の文字列を作成します。技術的には、それはコメントではありません。たとえば、k = '' '偽のコメント、実際の文字列' ''と書くことができます。次に、print(k)を実行してADTCの意味を確認します。
pinyotae 2017

3
これは今ではもっと理にかなっています。未使用の文字列を作成するとエラーが発生するvbaに慣れています。Pythonが単にそれを無視していることに気づかなかった。少なくともデバッグと学習には機能しますが、実際の開発には適していません。
Brandon Barney

Pythonソースコードでは、長い行を改行すると、エディターが自動的にインデントし、改行が前の行の一部であることを示しますか?疑似コードの長い行を分割した場合、どうすればよいですか?
alpha_989 2018年

回答:


1802

三重引用符で囲まれた文字列を使用できます。それらがdocstring(クラス/関数/モジュールの最初のもの)でない場合、それらは無視されます。

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

(を'''避けるために、先頭を適切にインデントしてくださいIndentationError。)

Guido van Rossum(Pythonの作成者)がこれを「プロのヒント」としてツイートしました。

ただし、PythonのスタイルガイドであるPEP8では、連続した単一行コメントの使用が推奨されており、これも多くのプロジェクトで見られるものです。テキストエディタには通常、これを簡単に行うためのショートカットがあります。


17
うーん。test.py見やすいように、Pythonスクリプトに巨大な複数行の文字列を挿入しました。するとimport testtest.pycファイルが生成されます。残念ながら、pycファイルは巨大で、文字列全体がプレーンテキストとして含まれています。私は何かを誤解していますか、またはこのツイートは間違っていますか?
unutbu

23
@unutbu、それがファイル内の唯一のものである場合、それはdocstringでした。その前にいくつかのコードを置くと、それはから消えますpyc。私は答えを編集して、「モジュール」をdocstringを持つもののリストに追加しました。
Petr Viktorin、2011年

31
コメントとして複数行の文字列が好きではありません。構文の強調表示は、コメントではなく文字列としてマークします。入力中に自動的にリージョンのコメントアウトと複数行コメントの折り返しを処理する適切なエディターを使用するのが好きです。もちろん、それは好みの問題です。
Sven Marnach、2011年

61
慣例として、"""docstringと'''ブロックコメントに使用すると便利です。このようにして'''、競合することなく通常のdocstringをラップすることができます。
Roshambo

19
複数行の文字列を複数行のコメントとして使用できます、これらの回答のどれも、段落を区別するために空白行を使用して、連続する単一行のコメントから複数行のコメントを作成することを特に推奨するPEP 8サブセクションを参照しいないことに驚いています#
エア

82

Pythonには、複数行の文字列/コメント構文があります。というのは、docstringとして使用されない限り、複数行の文字列 -で#始まるコメントのようにバイトコードを生成しないという意味です。実際には、コメントとまったく同じように機能します。

一方、この動作を公式のドキュメントに記載して真のコメント構文にする必要があると言う場合は、そうです、言語仕様の一部として保証されていないと言うのは当然です。

いずれの場合でも、テキストエディタは、選択した領域を簡単にコメントアウトできる必要があります(#各行の前に個別にを配置することにより)。そうでない場合は、テキストエディターに切り替えます。

特定のテキスト編集機能を持たないPythonでのプログラミングは、辛い経験になる場合があります。適切なエディターを見つける(およびそれを使用する方法を知る)と、Pythonプログラミングエクスペリエンスの認識に大きな違いが生まれます。

テキストエディターは、選択した領域をコメントアウトできるだけでなく、コードのブロックを簡単に左右にシフトできる必要がありますEnter。また、を押すと、カーソルが現在のインデントレベルに自動的に配置されます。コードの折りたたみも便利です。


リンクの崩壊を防ぐために、Guido van Rossumのツイートの内容は次のとおりです。

@BSUCSClub Pythonのヒント:複数行の文字列を複数行のコメントとして使用できます。ドキュメント文字列として使用しない限り、コードは生成されません。:-)


3
三重引用符で囲まれた文字列( '' ')は、実際には複数行のコメントを満たすために機能します。
Varun Bhatia 2013年

ブロックをコメントアウトするために( '' ')と( "" ")を使用しましたが、Djangoアプリケーションでは役に立ちませんでした。そのため、IDLEを選択し、コメントアウト領域コメント解除領域(ショートカット:Alt +下3と、それぞれのAlt + 4)フォーマットメニュー今ではこれまで..以上に簡単です。
Sauravクマー

IDEの使用も検討する必要があります。はい、多額ですが、適切に使用すれば、コーディング時間を大幅に増やすことができます。個人的にはPyDevを使用していましたが、現在はPTVS(Visual Studioを使用)を使用しています。virtualenvsと直接統合し、本当に良いデバッグ控えめに言って、 -それは、より多くのと一緒に上記の機能を含む、との仕事には本当にいいです、私は間違いなく、PTVSをreccomendだろう
Sbspider

2
@HappyLeapSecond「Pythonには本当の複数行コメント構文はありませんが、コメントとして使用できる複数行文字列をサポートしています」と明記する必要があると思います。
ADTC、2015

3
私が欲しいのは、テスト時にコードのブロック全体をコメントアウトする簡単な方法です。他の言語はそれを簡単にします。Pythonはただの苦痛です。
Albert Godfrind 2016

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スタイルのコメントには、ブロックを終了するため、a を含めることはできません。

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
三重引用符は何もしないテキストを挿入する方法です(私は通常の単一引用符付き文字列でもこれを行うことができると思います)が、コメントではありません-インタープリターは実際に行を実行します(ただし、行は何もしません)。そのため、三重引用符の付いた「コメント」のインデントが重要です。
Demis

12
このソリューションは正しくありません。weather2コメントはクラスの最初のものであるため、コメントは実際にはdocstringです。
ケンウィリアムズ

@KenWilliamsに同意します。これは正しい解決策ではありません。これを関数/クラスの真ん中に置いてみて、フォーマットが混乱してコードの折りたたみ/リンティングが自動化される様子を確認してください。
alpha_989 2018

25

AFAIK、Pythonにはブロックコメントがありません。個々の行にコメントを付けるには、#文字を使用できます。

あなたが使用している場合は、メモ帳++をコメントブロックのショートカットがありますgVimEmacsなどの他の機能にも同様の機能があると思います。


2
これは正しくありません。三重引用符の使用に関する応答を参照してください。
フェルナンドゴンザレスサンチェス

10
@FernandoGonzalezSanchez:間違いではありません。この「コメントとしての複数行の文字列」は、「プロチップ」として最もよく説明できます。公式のPythonドキュメントはこれについて何も言わないので、OPが投稿した質問です。
Sanjay T. Sharma

8
これはdocstringsのPEPです。そのページには「コメント」についての言及は1つもありません。
Sanjay T. Sharma

12

複数行の文字列が処理されないことを除いて、そうではないと思います。ただし、すべてではないにしても、ほとんどのPython IDEには、複数行のコードを「コメント化」するためのショートカットがあります。


11

コメントを入れたら

"""
long comment here
"""

スクリプトの途中で、Python /リンターはそれを認識しません。上記のコメントは標準的な推奨事項の一部ではないため、折りたたみはめちゃくちゃになります。使う方がいい

# Long comment
# here.

Vimを使用している場合は、commentary.vimのようなプラグインを使用して、を押すとコメントの長い行を自動的にコメント化できますVjgcc。WhereはVj2行のコードを選択し、gccコメント化します。

上記のようなプラグインを使用したくない場合は、検索と置換を使用できます

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

これにより、現在の行と次の行の最初の文字がに​​置き換えられ#ます。


8

複数行コメントなどの機能はありません。#1行のコードにコメントする唯一の方法です。あなたの多くは、解決策としてこれに「コメント」と答えました。

動作しているよう'''ですが、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,'

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をダイヤルして緊急電話をかけます。

ハッシュ文字は、1行または複数行のコメントにも使用できます。

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 2017

3
単一引用符のセットを使用すると、文字列が作成されます。1行のコメントの前には#を付ける必要があります。
johanno 2017

2

Visual Studio Codeユニバーサル公式マルチラインコメントトグル。

macOS:コードブロックを選択してから+/

Windows:コードブロックを選択してからCtrl+/


2

はい、両方を使用しても問題ありません。

'''
Comments
'''

そして

"""
Comments
"""

ただし、IDEで実行中に覚えておく必要があるのは、ファイル全体を「実行」して複数行コードとして受け入れる必要があることだけです。行ごとの「RUN」は正しく機能せず、エラーが表示されます。


1

Pythonで複数行のコードを#コメント化するには、すべての行で1行のコメントを使用するだけです。

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

Pythonで「適切な」複数行コメントを書き込むには、Pythonに"""ドキュメント文字列(またはdocstrings)機能の構文を持つ複数行文字列を使用します。これにより、プログラマはすべてのPythonモジュール、関数、クラス、メソッドに簡単なメモを簡単に追加できます。

'''
This is
multiline
comment
'''

また、次のようなクラスオブジェクトでdocstringにアクセスできることにも言及してください。

myobj.__doc__

これは以前の回答に何を追加しますか?
Peter Mortensen、

私の回答には詳細が含まれており、開発者の助けになるかもしれません。
shafik


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シンタックスハイライトのために?いずれにせよ、それは実際には奇妙に見えます(たとえば、ここでは"Some"の場合)-それが実際にパラメーター付きのコマンドラインコマンドであっても。lang-none(構文の強調表示がオフになっている)の方が良い選択です。
Peter Mortensen、

@PeterMortensen奇妙なハイライトを指摘してくれてありがとう!「lang-none」で行った。
ジョジョ

0

PyCharm IDEを使用する。

次のことが可能commentuncomment使用してコードの行は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によって検証される未割り当ての文字列で構成されています。

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

他の答えの中で、私は最も簡単な方法は、のPythonコメントサポートを使用するIDEコメント関数を使用することです#

私はAnaconda Spyderを使用していますが、それは次のとおりです:

  • Ctrl+ 1-コメント/コメント解除
  • Ctrl+ 4-コードのブロックにコメント
  • Ctrl+ 5-コードブロックのコメントを外します

単一/複数行のコードをコメント/コメント解除し#ます。

私はそれが最も簡単だと思います。

たとえば、ブロックコメント:

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

編集をありがとう@PeterMortensen :)
aniltilanthe

-2

コメントする行を選択し、Ctrl+ ?を使用してSublime TextエディターでPythonコードをコメント化またはコメント解除します。

1行の場合はShift+ を使用できます#

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.