Pythonのブロックコメント(Block comments)の書き方

674, 2023-06-05

目次

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 ・)

ええ・・・



この記事のアンケートを送信する