web-dev-qa-db-ja.com

なぜpythonはコメントに型破りな三重引用符を使用するのですか?

なぜpython C/C++/Javaが使用するような従来のスタイルのコメントを使用しなかったのか:

/**
 * Comment lines 
 * More comment lines
 */

// line comments
// line comments
//

これには特定の理由がありますか、それともjust意的ですか?

30
mtahmed

Pythonはコメントに三重引用符を使用しません。コメントはハッシュ(別名ポンド)文字を使用します。

# this is a comment

三重引用符は doc string であり、コメントとは異なり、実際にはプログラムの実際の文字列として利用できます。

>>> def bla():
...     """Print the answer"""
...     print 42
...
>>> bla.__doc__
'Print the answer'
>>> help(bla)
Help on function bla in module __main__:

bla()
    Print the answer

文字列である限り、三重引用符を使用する必要はありません。 """の使用は単なる慣習です(そして、複数行であるという利点があります)。

86
balpha

多くの答えが多くのポイントを獲得しましたが、物事がどのように機能するかについての完全な見解を与えてはいけません。要約する...

# commentは、どのようにPythonが実際のコメントを行うか(bashや他のいくつかの言語と同様)。Pythonは、行末までのコメントのみ、 (javascriptの/* .. */とは対照的に)明示的な複数行コメントラッパーはありません。ほとんどのPython IDEを使用すると、一度にブロックを選択してコメントできます。

その後、通常の単一行​​python文字列:'または"の引用符を使用できます(たとえば'foo'"bar")。これらの主な制限は、複数行にまたがらないことです。複数行文字列の目的:これらは、三重の単一引用符または二重引用符('''または""")で囲まれた文字列であり、一致するエスケープされていないターミネータが見つかった場合にのみ終了します。 。

これら2つの文字列タイプのいずれかは、完全に通常の文字列オブジェクトを定義します。変数名を割り当てたり、演算子を適用したりすることができます。一度解析すると、どの形式にも違いはありません。ただし、whereに基づく2つの特殊なケースがあり、文字列はどのように使用されますか...

まず、追加の操作が適用されておらず、変数に割り当てられていない文字列が書き留められた場合、それはどうなりますか?コードを実行すると、基本的な文字列は基本的に破棄されます。そのため、複数行の文字列を使用してpythonコードの大部分をコメントアウトすると便利です(内部の複数行文字列をエスケープする場合)。これはそれほど一般的ではなく、意味的にも正しくありません。 、しかしそれはis許可されています。

2番目の使用方法は、def Foo()class Foo()、またはモジュールの開始後にimmediatelyに続くこのような裸の文字列は、ドキュメントを含む文字列として扱われることです。そのオブジェクトに対して、オブジェクトの__doc__属性に格納されます。これは、文字列が「コメント」のように見える最も一般的なケースです。違いは、are解析されたコードの一部としてアクティブな役割を実行し、__doc__...に保存され、コメントとは異なり、実行時に読み取ることができることです。

44
Eli Collins

三重引用符はコメントではありません。これらは 文字列リテラル で、複数行にまたがり、結果の文字列にそれらの改行を含めます。これにより、使用することができます

somestr = """This is a rather long string containing
several lines of text just as you would do in C.
    Note that whitespace at the beginning of the line is\
 significant."""

の代わりに

somestr = "This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
    Note that whitespace at the beginning of the line is\
 significant."
18
jamessan

ほとんどのスクリプト言語は、#をコメントマーカーとして使用して、実行するインタープリターをプログラムローダーに指定するシバン(#!)を自動的にスキップします(#!/ bin/bashなど)。あるいは、インタープリターに最初の行を自動的にスキップするように指示することもできますが、#をコメントマーカーとして定義するだけで便利なので、結果としてスキップされます。

5
Stefano Borini