Pythonのブロックコメント(Block comments)の書き方
目次
Pythonのブロックコメント
ブロックコメントと言うと複数行のコードを一括でコメントアウトするコメントを想像しがちです。
たとえばC/C++/Rustなどでは/* */
を使うことで複数行のコードをまとめてコメントアウトできます。
Pythonの「ブロックコメント」という用語ですが、これはネット上では解釈の違いが見られるようです。
いわくブロックコメントはクオート3つで囲むコメントのことだ。
いわくPythonにブロックコメントはない。
いわくPythonのブロックコメントは#
を並べたものだ。
という具合にです。
今回はこれらのネット上の解釈の違いについても解説していきます。
コメントの種類についてのおさらい
コメントには大きく分けて3つあります。
それが
行コメント
インラインコメント
ブロックコメント
の2つです。
行コメントは1行をコメントアウトするコメントのことです。
たとえばC/C++/Rustであれば
// this is comment
などがそうです。
Pythonでは行コメントは
# this is comment
という感じで#
を使います。
インラインコメントはコードのお尻などに書かれるコメントです。
C/C++/Rustであれば
1 + 2 // this is comment
Pythonであれば
1 + 2 # this is comment
になります。
ブロックコメントは複数行のコードをまとめてコメントアウトするコメントです。
C/C++/Rustで言えば
/* this is comment this is comment this is comment */
などがそうです。
ではPythonではブロックコメントはどう書くのか?
というところですが、ここでネット上ではPythonのブロックコメントの定義に混乱が見られます。
Pythonにおけるブロックコメント
よくある説明がクオート3つを使ったdocstring
を使ったコメントアウトです。
たとえば
''' this is comment this is comment this is comment '''
や
""" this is comment this is comment this is comment """
などがそうです。
これは関数やクラスなどにドキュメントを書くときに使われる文字列です。
実体はただの文字列で、複数行の内容を含んだ文字列を書く時にも使われます。
Pythonはこのdocstring
が関数の先頭やクラスの先頭にあるときにhelp()
などでそれをドキュメントとして表示します。
def func(): """ これは私の 関数です。 """ pass help(func)
上記のコードの出力結果は以下です。
Help on function func in module __main__: func() これは私の 関数です。
それでネットではこのdocstring
をブロックコメントとして紹介している記事が多いです。
一方、Pythonにはブロックコメントなどなく、docstring
はコメントではなくただの文字列であるという意見も見られます。
このdocstring
はただの文字列であるというのは正しくて、じっさいスクリプトを実行してもこのdocstring
は無視されず文字列として生成されます。
しかしさらに混乱するのが以下のPEP 8
です。
PEP 8
はPythonのコーディングスタイルを定めた規約です。
Block Comments
Block comments generally apply to some (or all) code that follows them, and are indented to the same level as that code. Each line of a block comment starts with a # and a single space (unless it is indented text inside the comment).
Paragraphs inside a block comment are separated by a line containing a single #.
PEP 8
では#
で始まる複数行のコメントをブロックコメントとして呼称しているようです。
つまり以下のようなコメントがブロックコメントです。
# this is comment # this is comment # this is comment
で、Pythonにブロックコメントはあるの?
PEP 8
の呼称に従えばこうなります。
コードの末尾に書かれるのがインラインコメント。
1 + 2 # this is comment
複数行の#
で書かれたコメントがブロックコメント。
# this is comment # this is comment # this is comment
ということです。
しかしブロックコメントという用語は一般的にはC/C++/Rustで言う/* */
やHTMLで言う<!-- -->
などが該当します。
ですのでPEP 8
のこの呼称は間違っているんじゃないのかな? というのが今のところの私の感想です。
さらに言うとPythonにはブロックコメントに相当する機能は無い、というのが実態に即しているように思います。
docstring
は文字列でコメントではないからです。
おわりに
今回はPythonのブロックコメントについて解説しました。
ネット上でも混乱が見られますがなにか参考になれば幸いです
(^ _ ^) | 細かいことはいいんだよ |
(・ v ・) | ええ・・・ |