ユーニックス総合研究所

  • home
  • archives
  • python-block-comment

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

  • 作成日: 2023-06-04
  • 更新日: 2023-12-24
  • カテゴリ: Python

Pythonのブロックコメント

ブロックコメントと言うと複数行のコードを一括でコメントアウトするコメントを想像しがちです。
たとえばC/C++/Rustなどでは/* */を使うことで複数行のコードをまとめてコメントアウトできます。
Pythonの「ブロックコメント」という用語ですが、これはネット上では解釈の違いが見られるようです。

いわくブロックコメントはクオート3つで囲むコメントのことだ。
いわくPythonにブロックコメントはない。
いわくPythonのブロックコメントは#を並べたものだ。

という具合にです。
今回はこれらのネット上の解釈の違いについても解説していきます。

関連記事
Djangoでオブジェクトを一括作成・更新【bulk_create, bulk_update】
DjangoのModel.objects.filter()の使い方【QuerySet】
Djangoのmodelのcreate()の使い方【Python】
Django入門: ルートの設定 ~ 簡単な一行掲示板アプリを作る その4【Windows10】
NumPyのappend()の使い方: 配列の末尾に要素を追加
Numpyのarangeの使い方: 指定範囲の数列を生成する
Python3でYoutube Data APIを使ってキーワード検索する
PythonからC言語(my.puts)を呼び出して実行する

コメントの種類についてのおさらい

コメントには大きく分けて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のブロックコメントについて解説しました。
ネット上でも混乱が見られますがなにか参考になれば幸いです

🦝 < 細かいことはいいんだよ

🦝 < ええ・・・