Pythonのコメントアウト(1行/複数行)の書き方【PEP8推奨ルール】

Pythonで推奨されるコメントの書き方を解説します。

Pythonのコメントアウト(1行/複数行)の書き方【PEP8推奨ルール】

Pythonのコメントは#で記述する(急いでいる人向け)

Pythonのコード内で#を書くと、その行の#以降はコメントになります。コメント部分はコードの実行時に無視されます。

複数行にコメントする場合も、#を使います。シングルクォートとダブルクォートを使ってコメントする方法('''"""で囲む方法)は、後述する理由であまり推奨できません。

# シャープを行頭におくと、1行全体をコメントアウトする

print("このprint関数は実行される")  # シャープ以降はコメントになる

# このように、複数行にわたって
# コメントを書くことができる

プログラミングにおけるコメントとは?

プログラミングにおけるコメントとは、ソースコードの中に記述するが、プログラムの実行中は無視される文章です。開発を行う人が、自分や他の人に、書いたコードの意図や役割を説明するために使います。また、プログラムのデバッグ中に、一時的に無視したいコードを無効化するためにも利用されます。

Pythonに限らず、JavaScriptやPHPなどのプログラミング言語でもコメントを入れる方法が定義されています。

ちなみに、『コメント』と『コメントアウト』という呼び方は、名詞か動詞かの違いです。コメントを書くこと、書いたコードをコメント化する行為をコメントアウトと呼びます。

Pythonで1行だけコメントアウトする書き方(#)

Pythonで1行だけコメントを入れたい場合には#を使います。

コード中に#を入れると、その行の#以降の部分がコメント化され、プログラムの実行中は無視されるようになります。

たとえば、以下には3つの例を示します。

一つ目のprint関数は、通常通り実行され、指定の文章がprintされます。

二つ目のprint関数は、その行の先頭に#があり、行全体がコメントアウトされているため、実行されません。

三つ目のprint関数は、その行の末尾に#があるため、print関数自体は実行されますが、#以降はコメントのため、プログラム自体に関係のないことを書いてもエラーになりません。

print("この行はコメントがないので、この文章はprintされます")

# print("この行の先頭に#があるので、この文章はprintされません")

print("この行の末尾に#があるので、この文章はprintされます") # この行の#より前はコードとして有効

Pythonで複数行コメントアウトする書き方

#を使ったコメントは複数行に渡って記述することができるので、連続した行をコメントアウトすることもできます。後述する方法よりもこちらの方法が推奨されます。

# このように、
# 複数行にわたってコメントを書いても、
# Pythonの実行中には無視されます
print("このprint関数は実行されます。")


# 以下の関数もプログラム実行中は無視されます
# def is_even(num):
#     if num % 2 == 0:
#         return True
#     else:
#         return False

Pythonにおいてはシングルクォートやダブルクォートを三つ続けたもの('''""")で囲むことで、その範囲を改行を含めた文字列として扱うことができます。通常は、関数やクラスの説明に利用するdocstring(ドキュメンテーション文字列)として使うのですが、文字列を単独でコード内に記載しても、何かの操作をしない限りはコードの実行に影響を与えないため、複数行のコメントの代わりとして使われることもあります

# シングルクォートをコメントとして使う
'''
この文字列はコメントとして扱われます。
複数行書いても実行時に無視されます。
'''

# ダブルクォートをコメントとして使う
"""
この文字列はコメントとして扱われます。
複数行書いても実行時に無視されます。
"""

ただし、この書き方はあくまで文字列であり、#によるコメントアウトとは違ってコードの実行中に無視されません。そのため、Pythonの記述ルールであるインデントには気をつける必要があります。

たとえば、関数の中でシングルクォートやダブルクォートを使ってコメントを書く場合には、必ずPythonのインデントルールに従う必要があります

# 有効な書き方
def valid_sample():
    print("これはサンプルです")
    """
    ダブルクォートで囲むことで、
    コメント的な使い方ができます。
    """
    print("この関数は問題なく実行できます")


# 無効な書き方、インデントが合っていない
def invalid_sample():
    print("これはサンプルです")
"""
ダブルクォートで囲むことで、
コメント的な使い方ができます。
"""
    print("この関数はエラーがでます")
# IndentationError: unexpected indent

そもそも、シングルクォートやダブルクォートはdocstring(ドキュメンテーション文字列)として使うものなので、通常のコメントを書くなら#を使いましょう

また、コード中に長々とコメントを書くのは推奨されません。コメントは最小限にとどめ、コード自体をわかりやすくしたり、詳細については別でドキュメントを作成するなどの対応をすると良いでしょう。

PEP8(コーディング規約)が推奨する書き方

PEP8とはPythonのコーディング規約のことで、Pythonでコードを書く時に推奨される書き方をまとめたものです。プログラミング規約は、所属している会社などで独自に決めていることもありますが、特段そのようなコーディング規約が決まっていない場合にはPEP8の規約に従っておくのがベターです。

コメントの方法についても推奨されるルールが書かれているので、まとめておきます。

ブロックコメント

ブロックコメントはその行全体をコメントアウトするもので、行頭に#を書きます。#の後には1つスペースを入れて、コメントを書き始めます。コメント内でインデントが意味をなす場合には追加のスペースを入れても問題ありません。

複数行のコメントを書く際には、最終行以外の行の末尾に、スペースを2つ入れるようにします。

# ブロックコメントは、  
# このように、#1つの後にスペースを1ついれる


# 以下のように意味のあるインデントであれば、  
# もっとスペースを入れても良い  
# * アジェンダ  
#   * テーマ①  
#   * テーマ②

インラインコメント

インラインコメントは#から行末までのコメントです。その行のコードから、最低でもスペース二つ空けて記述し、ブロックコメントと同様に#とスペース1つ分でスタートする。

インラインコメントは多用しないようにしましょう。(注記:そのコード自体が何の操作をしているかはコードから自明である場合があるため、目的や意図を中心に、分かりづらい場面でのみ記述するのが良い)

# インラインコメント
# 以下のような書き方は意味がないため、なるべく書かない
x = x + 1  # xをインクリメントする

# 意図を説明するコメントはOK
x = x + 1  # 境界値を避ける