8

Python がコメントのインデントに反応するのはなぜですか?

def foo():
    """
    Random comment
    """
    return True

動作しますが:

def foo():
"""
Random comment
"""
    return True

動作せず、IndentationError をスローします。

コメントはコメント以上のものであってはならないので、私には奇妙に思えます。ちなみに、これは機能します:

def foo():
# Another random comment
    return True
4

2 に答える 2

14

三重引用符で囲まれた文字列はコメントではありません。メソッドのドキュメント文字列です。foo.__doc__たとえば、後でアクセスしたり、 でフォーマットしたりできますhelp(foo)。三重引用符 ("""または) は、改行をエスケープする必要のない文字列リテラル'''を指定する Python 固有の方法です。

そのため、関数の本体の一部であるため、一致するようにインデントする必要があります。実際、関数の最初のステートメントとして現れる文字列はすべてdocstring として扱われ、単一引用符も機能します。同じトリックがクラスとモジュールにも機能します。

多くのツールがこのドキュメンテーション文字列を利用できます。たとえば、この情報にdoctest テストを埋め込むことができます。この文字列のフォーマットに関する規則については、 PEP 257を参照してください。

一方、コメントは常に(文字列リテラルの一部ではない) で示され#、行末まで無視されます。すべての行にコメントが含まれている場合、空白のみの行と同様に、行全体が無視されます。コメントに関するドキュメントを参照してください。

于 2012-08-08T07:55:18.240 に答える
2

三重引用符で囲まれた文字列はコメントではなく、文字列リテラルです。コードによって割り当てられたり使用されたりすることはありませんが、それでも通常の文字列であり、Python の構文に適合する必要があります。(この場合、たまたま docstring ですが、インデントが重要かどうかとは関係ありません。)

#コメントを取得する方法です。

于 2012-08-08T07:55:19.513 に答える