Pythonに複数行コメントがないのはなぜですか?


252

はい、三重引用符の文字列が複数行のコメントとして機能することを認識しています。例えば、

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

そして

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

しかし、技術的にはこれらは文字列です、そうですか?

私はググってPythonスタイルガイドを読みましたが、コメントの/ * * /タイプの複数行の正式な実装がない理由に対する技術的な答えを見つけることができませんでした。三重引用符を使用しても問題はありませんが、この設計の決定につながった原因について少し興味があります。


8
あなたが文字列としてそれを行うことができるなら、なぜもっと方法を追加するのですか?
Brody

12
追加したいのは、コメントしようとしているものが偶然コメント/複数行の文字列を持っていると失敗することです。そしてもちろん、それが私たちがそれらを必要とする理由です。
nycynik 2012

50
@ S.Lott便利な質問だと思います。Pythonが優れている理由を理解するには、行われた設計上の決定(およびまだ行われている継続的な決定)を理解することが重要です。質問は、論争や対決ではありません。それは好奇心が強い。好奇心をそれほど厳しくする必要はありません。
Mark E. Haase

6
タラの複数行コメントが必要な場合if False:はコードのみ
AturSams

5
@Brody文字列が処理されるため。コメントは無視されます。コメントとして文字列を使用すると問題が発生します。周りを見回すだけです:)
ADTC

回答:


266

「Guidoは複数行コメントの必要性を感じていなかった」よりも良い答えが得られるとは思いません。

グイドはこれについてツイートしています:

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


28
これに関するグイドのツイートを見てください。
Petr Viktorin、2011年

15
複数行の文字列とブロックのコメントを混在させることの欠点の1つは、IDEに必要なものがわからないため、必要に応じて異なるスタイルでコメントを表示できないことです。
Baiyan Huang 2012

21
また、複数行の文字列を含むコードをコメントアウトすることもできなくなります(注意しないと、インデントエラーが発生する可能性があります)。え!!
マイクグラハム

3
私は多くのフィールドで働いてきましたが、コードにコメント化されたコードが含まれている場合、コードは拒否され、CVを更新するように招待されることもあります。不要なコードを削除するか、コードがバージョン管理されている場合は問題にならないようにするか、if False:無効にする必要があるコードの前に使用します。
Steve Barnes、

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の構文強調表示機能がそれをどのように処理するかです。
Nietzche-jou

73
これは、エスケープ文字を使用する多くの理由の1つです。複数行コメントをサポートしない理由としては、私にはわかりません。
ナタリーアダムス

34
私はあなたの論理を理解していません-おそらく私のコメントは十分に明確ではありませんでした。エスケープ文字として\を使用した場合:print( "Pick an operation:+-* \ /") "* /"は、文字通り/が出力されるため、終了コメントブロックを示しなくなりました。C ++でこれをテストしてください。実際、SOの構文強調表示機能は、それが有効であることを示します。これは複雑な主題ではなく、他の言語で何年も存在しています。コードで「* /」を使用できることを示すエスケープ文字の使用を含めるように投稿を更新してください。
ナタリーアダムス

23
コードに '' 'が含まれている場合はどうなりますか?おっと、コードにコメント終了デリミタが含まれている
siamii

21
複数行のコメントは本質的に分割可能ではありません。それらのほとんどの実装がそうであるだけです(Pythonを含む)。私の頭では、Pythonで複数行のコメントを作成する明白な方法は、コメントブロックを開始し、#:インデントを使用してコメントの終了を示すことです。クリーンで一貫性があり、ネストを完全に処理します。
GatesDA

34

三重引用符で囲まれたテキストは、複数行のコメントと見なされるべきではありません。慣例により、これらはdocstringです。彼らはあなたのコードが何をするか、そしてそれをどのように使うかを説明するべきですが、コードのブロックをコメントアウトするようなもののためではありません。

Guidoによると、Pythonの複数行コメントは、連続した単一行コメントです(「ブロックコメント」を検索してください)。

コードブロックにコメントを付けるために、次のパターンを使用することがあります。

if False:
    # A bunch of code

6
それ以来、グイドは心を落ち着かせたようです。
Petr Viktorin、2011年

5
「if false:」の解決策に関しては、Pythonではタブで機能するため、「if False:」の下のすべてのコードをタブで移動する必要があります。その後、チャンクのタブを解除します。そのため、テキストエディタをかなり気の利いたものにする必要があります。
barlop

3
まともなエディターを使用する場合、* /
AturSams

@barlop yup-エディターを学びましょう!これは通常、vimで1秒未満で達成できますV}>>
Triptych

30

これはおそらく、タスクを実行する1つの明白な方法があるはずであるというコアコンセプトに戻ります。コメントスタイルを追加すると、不必要な複雑さが追加され、読みやすさが低下する可能性があります。


8
それが問題だと私は信じています。コメントとして文字列を使用することは明白ではなく、「タスクを実行する1つの方法」の原則に違反しています#
GatesDA

1
しかし、それはCベースの言語で使用しているものと大きく異なるわけではありません。
ベンロバーツ

//、誰かが複数行のコメントを必要とする理由を検討してください。正当な理由:...「これらの#doohickeysを入力する必要がない」および「この特定のコメントを非常に正確に表示する必要があり、その正確な方法では先行する#を許可しません。」特定の問題が発生した場合、誰かがASCIIダイアグラムを作成したり、参照JavaScriptコードをコピーして貼り付けたりしたいとします。ここで、タスクを実行する1つの明白な方法は、そのタスクのエッジケースをカバーしていません。ただし、追加のコメントスタイルは不適切であることに同意します。
Nathan Basanese

3
「私はこれらの#doohickeysの多くを入力する必要はありません」。そのため、ほとんどすべての言語にブロックコメント(/ * .. * /)があります。信じられないかもしれませんが、私は自分のコードが何をするかを文書化するのが好きです:入力、出力、使用されるアルゴリズム、パラメーター...これもまた変更される多くのテキストです。単一行コメントのみへの制限は、とんでもないことです。私はコードをコメント化するアプローチを推奨しないことに注意してください-よく知られている可能性のある副作用が理解されている限り、別のアプローチを試すときに便利です。
Albert Godfrind 16

3
私がpythonについて不満を抱いているもう1つのことは、Pythonは本質的には1人で設計された言語であることです。Guidoが言うことは真実です...したがって、言語バージョン間の奇妙な非互換性はすべてあります。どうして ?グイドがそう言ったので...
Albert Godfrind

12

まあ、三重引用符はドキュメント文字列の複数行コメントとして使用されます。そして、#コメントはインラインコメントとして使用され、人々はそれに慣れます。

ほとんどのスクリプト言語には、複数行のコメントもありません。多分それが原因ですか?

参照PEP 0008、セクションのコメント

また、Pythonエディターにブロックコメント用のキーボードショートカットがあるかどうかを確認します。EmacsはEclipseと同様にそれをサポートしており、おそらくまともなIDEのほとんどがサポートしています。



5

個人的にはJavaのコメントスタイルは

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

したがって、1行だけのコメントがあることは、スタイルが前の例に典型的である場合はそれほど悪いことではありません。

#
# 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、一方、multilinersの必要性のより多くがあります。入力を続けるのは難しい<!--comments like this-->です。


4
これは重要ではありません-単一行コメントと複数行コメントの両方に明らかな使用例があります。私はそれらを他の言語で広く使用しています(ただし、Pythonの純粋主義者は他の言語を気にしないことは知っていますが)。;)
johndodo

1
200行のコードでこれを試してみてください。取り除いて、元に戻して、もう一度取り出します。200の最初の#を入力すると、古くなります。
DragonLord、

0

これは推測にすぎません。

これらは文字列であるため、セマンティックな値がいくつかあります(コンパイラーはそれらを取り除きません)。したがって、それらをdocstringとして使用することは理にかなっています。それらは実際にはASTの一部になるため、ドキュメントの抽出が容易になります。


0

その上、複数行コメントは雌犬です。申し訳ありませんが、言語に関係なく、デバッグ目的以外には使用しません。次のようなコードがあるとします。

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

次に、デバッガーでは修正できないコードがあることに気づくので、これらの複数行コメントを使用して、コードのますます小さなコメントをコメントアウトして、手動でデバッグを開始します。これにより、関数が得られます。

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

これは本当にイライラします。


3
素晴らしいですが、Pythonには/*-styleコメントがありません。
トリプティク2010

17
そうです、Pythonには実際の複数行コメントがないので、Pythonでの例を示すのはちょっと難しいです。
martiert 2010

2
私は個人的に問題を理解していません。余分な* /を削除するだけです。正確にする必要がある場合は、//を使用して単一行をコメント化します。
ナタリーアダムス

4
ネストされたコメントを許可するいくつかの言語(それらの多くは何らかの理由で機能します)があります。例については、rosettacode.org / wiki / Commentsで「nested」を検索してください
キース

1
ええ、複数行コメントを複数行コメントに入れるのはイライラするでしょう。私は一度に自分のプログラムを少ししか覚えていませんが、少なくとも自分のプログラムのどの部分を見ているか、コメントアウトしたかを覚えています。しかし、それさえ覚えていない場合は、一部のIDEがコメントとは斜体にするという事実を利用できます。とにかく、そのような小さな関数の場合は、1行のコメントを使用することもできます。しかし、プログラムの大きなチャンクをコメントアウトする場合、実際には複数行のコメントが必要です。またはその機能を備えたテキストエディタ。
Barlop 2013年

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 =と、メモリを消費しません。
エンドリス2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.