web-dev-qa-db-ja.com

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

OK、トリプルクォートの文字列は複数行のコメントとして機能することを知っています。例えば、

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

そして

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

しかし、技術的に言えば、これらは文字列です、正しいですか?

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

232
CoolGravatar

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

Guidoには tweeted があります:

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

253
Ned Batchelder

複数行のコメントは簡単に解読できます。単純な電卓プログラムに次のものがある場合はどうなりますか?

operation = ''
print("Pick an operation:  +-*/")
# Get user input here

複数行のコメントでそれをコメントしてみてください:

/*
operation = ''
print("Pick an operation:  +-*/")
# Get user input here
*/

おっと、文字列には終了コメント区切り文字が含まれています。

59
Steve Losh

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

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

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

if False:
    # A bunch of code
34
Triptych

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

30

さて、トリプルクォートはdocstringの複数行コメントとして使用されます。 #コメントはインラインコメントとして使用され、人々はそれに慣れます。

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

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

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

12
Abgan

Pythonの禅

明白な方法が1つあり、できれば1つだけにする必要があります。

9
Jeremy Cantrell

個人的に言う_Javaのコメントスタイルは

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

あなたのスタイルが前の例に典型的であれば、単一行のみのコメントを持つことはそれほど悪いことではありません。

#
# My multi-line comment in Python
#

VB.NETはまた、単一行のみのコメントを持つ言語であり、個人的には、コメントが好きなコメントが少なくなり、ある種の引用のように見えるので迷惑です

'
' This is a VB.NET example
'

単一行のみのコメントは、複数行のコメントよりも文字の使用が少なくなり、おそらく正規表現ステートメントのいくつかの危険な文字によってエスケープされる可能性は低くなりますか?しかし、私はネッドに同意する傾向があります。

5
Kezzer
# This
# is
# a 
# multi-line
# comment

これを実現するには、エディターでコメントブロックを使用するか、検索および置換(s/^ /#/ g)します。

4
recursive

Pycharm IDEのコードブロックをコメントアウトするには:

  • コード|行コメント付きのコメント
  • WindowsまたはLinux: Ctrl + /
  • マックOS: Command + /
4

これを解決するには、テキストエディター(TextPad)のマクロをダウンロードして、行を強調表示し、各行の最初に#を挿入します。同様のマクロは#を削除します。マルチラインが必要な理由を尋ねる人もいるかもしれませんが、デバッグ目的でコードのブロックを「オフ」にしようとする場合に便利です。

3
kati

IDLEを使用した複数行コメント:

  • Mac OS X、コード選択後、コードのブロックにコメントを付けます Ctrl+3 使用してコメント解除 Ctrl+4

  • Windows、コード選択後、コードのブロックにコメントを付けます Ctrl+Alt+3 使用してコメント解除 Ctrl+At+4

0
Elenasys

それらは単に不要と見なされたと仮定します。 #a commentと入力するだけなので、複数行コメントは多くの単一行コメントで構成できます。

一方、 HTML の場合は、マルチライナーが必要になります。 <!--comments like this-->を入力し続けるのは困難です。

0
stalepretzel

これは単なる推測です。

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

0
hasen

#規則は一般的なものであり、#記号コメントではできない複数行コメントでできることは本当に何もないからです。これは、PL/Iに戻る/* ... */コメントの祖先のような歴史的な事故です。

0
Charlie Martin

Pythonで複数行のコメントを探している人にとって、トリプルクォート形式を使用すると、難しい方法を学んだばかりであるため、いくつかの問題が生じる可能性があります。このことを考慮:

this_dict = {
    'name': 'Bob',

"""
This is a multiline comment in the middle of a dictionary
"""

    'species': 'Cat'
}

複数行のコメントは次の文字列に組み込まれ、'species'キーを台無しにします。コメントには#を使用する方が良いでしょう。

0
Itamar Mushkin

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

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

次に、デバッガーで修正できない何かがコードにあることがわかります。そのため、これらの複数行コメントを使用して、コードの小さなチャンクをコメントアウトすることで、手動でデバッグを開始します。これにより、次の機能が得られます。

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

これは本当に刺激的です。

0
martiert