そうですね、式、リテラル、および文字列の概念を確認することは役に立ちます。
文字列、式、およびリテラル
プログラムでは、さまざまな種類のデータを表現する必要があります。データのタイプの1 つは整数です。別のタイプは浮動小数点数です。
あるタイプの値は、さまざまな方法で、つまりさまざまな式を通じて生成できます。式は、値を「作成」するプログラムの断片です。たとえば、以下の Python 式では、式 2+2
は値 4 を生成します。代入演算子は、生成=
された値 4 を という名前の変数に入れますi
。
i = 2+2
上記のステートメントを考えると、以下の式は同じ値 4 を生成しますが、この式には変数のみが含まれています。
i
以下では、算術式によって値を生成し、次に変数(これも式です) によって値を生成しました。
ただし、言語は、基本的な値を直接生成する構文を提供する必要があります。たとえば、2
上記の式の は値 2 を取得します。基本的な値を直接生成する式はリテラルと呼ばれます。どちらの式も2+2
同じ4
値 4 を返しますが、2 番目の式は言語によって提供される操作を表す非常に基本的な方法であり、明示的な操作を実行する必要がないため、リテラルです。
文字列リテラルと複数行文字列
非常に重要なタイプのデータは、テキスト、一連の文字、数字、およびその他の文字です。この型は通常stringと呼ばれます。
このように、文字列リテラルは、文字列を生成するリテラルです。Python では、これらのリテラルはさまざまな方法でマークされます (つまり、文字列リテラルには多くの構文があります)。たとえば、リテラルの先頭または末尾に一重引用符または二重引用符を配置できます。
"A string literal"
'Another string literal'
他の方法は、同じ位置に 3 つの一重引用符または二重引用符を配置することです。この場合、リテラルは複数の行にまたがることができます。
"""A single line string literal"""
"""A multiline
string literal"""
'''Another multiline
string literal'''
文字列リテラルに対してどのような構文を選択しても、その値は変更されないことに注意してください。一重引用符で囲まれた文字列は、同じ文字を含む二重引用符で囲まれた文字列と同等であり、三重引用符で囲まれた文字列は、同じ内容の単一引用符で囲まれた文字列と同等です。
>>> "A single line string literal" == 'A single-line string literal'
True
>>> """A single line string literal""" == "A single line string literal"
True
>>> # \n is the character that represents a new line
>>> "A multiline\nstring literal" == """A multiline
string literal"""
True
Docstrings と、それらが文字列リテラルであるべき理由
ドキュメントが言っていることは、メソッド宣言の直後に文字列リテラルを置くことができ、このリテラルがドキュメントとして使用されるということです。一重引用符または二重引用符で囲まれた文字列を使用するか、または一重引用符または三重引用符で囲まれた文字列を使用するかは問題ではありません。リテラルである必要があるだけです。
以下の関数を検討してください。
def f1(value):
"Doc for f1"
return value + 1
def f2(value):
"""Doc for f2"""
return value + 2
次に、Python コンソールでそれらを宣言し、 and を呼び出しhelp(f1)
ますhelp(f2)
。文字列リテラルの構文は重要ではないことに注意してください。
OTOH、ドキュメントを生成するために、変数や文字列に対する操作など、他の式を使用することはできません。したがって、以下の関数の最初の行の文字列はdocstring ではありません。
mydoc = "This is doc"
def f3(value):
mydoc
return value+3
def f4(value):
"This is no documentation " + "because it is concatenated"
return value+4
コンパイラはドキュメントとして管理するように明示的に記述されているため、リテラルである必要があります。ただし、コンパイラは変数や複雑な式などをドキュメントとして管理する準備ができていないため、それらを無視します。つまり、設計によるものです。
三重引用符文字列をドキュメント文字列として使用する理由
任意の形式の文字列リテラルを docstring で使用できますが、ドキュメントには通常、複数の行や段落を含む非常に長いテキストが含まれていると考えるかもしれません。うーん、行数が多いので、複数行を受け入れるリテラル形式の方がいいですね。これが、docstring の記述方法として三重引用符文字列が好まれる (ただし必須ではない) 理由です。
マージンノート
実際、Python 関数の任意の場所に文字列リテラルを配置できます。
def flying_literals(param):
"Oh, see, a string literal!"
param += 2
"Oh, see, ANOTHER string literal!"
return param
"the above literal is irrelevant, but this one can be still MORE IRRELEVANT"
ただし、最初の行のリテラルだけが違いを生みます(ドキュメントです)。他のものはno-opsです。