Pythonのコメント、コメントアウトの書き方

Pythonで説明をコメントとして記述したり不要なコードをコメントアウトしたりする場合は#を使います。 トリプルクォート(三重引用符)による文字列がコメントとして利用されている場合もあるが、関数に説明を加える公式の仕組みであるdocstring以外であえてトリプルクォートを使う理由はない。 ここでは以下の内容について説明します。

#によるコメント、コメントアウト インラインコメント ブロックコメント(行全体) PEP8(コーディング規約)の推奨ルール トリプルクォートの複数行コメントとしての利用 関数アノテーションによるコメント

# によるコメント、コメントアウト

インラインコメント

#から行末までは実行時に無視されます。#より前のコードは有効。

a = 1  # comment

行の途中の一部分を範囲指定してコメントとすることはできません。例えばコメント中にさらに#が含まれていてもそこでコメントが終わるわけではなく、最初の#以降はすべてコメントとみなされます。

a = 1  # comment # b = 2

ブロックコメント(行全体)

#を行頭に書くとその行すべてがコメントとみなされ実行時には無視されます。

# a = 1

対象の行すべての行頭に#を書けば複数行に渡ってコメントアウトされます。

a = 1
# b = 2
# c = 3
# d = 4
e = 5

PEP8(コーディング規約)の推奨ルール

PEPはPython Enhanthment Proposal(Python拡張提案)の略で、PEP8ではコーディング規約(スタイルガイド)について書かれています。#を使ったコメントについても推奨のルールが記載されています。

PEP 8: Comments -- Style Guide for Python Code | Python.org

PEP8のルールを守らなくても文法上エラーになるわけではないが、所属組織やプロジェクトのコーディング規約が特にない場合はPEP8に従っておくといいと思います。 pydocstyleやflake8などのコードチェッカーにおけるエラーコードとともにコメントの書き方のルールを示す。

Error codes — pycodestyle 2.4.0 documentation

インラインコメント E261: at least two spaces before inline comment 文とコメントの間は少なくとも2つのスペースを置く。 3つ以上でもOKだが、これは下の例のようにコメントの位置を揃える場合のため。不要なスペースはないほうがいい。

# No:
a = 1 # comment

# Yes:
a = 1  # comment

a = 1      # comment
xyz = 100  # comment

E262: inline comment should start with '# ' インラインコメントは#とスペースひとつから始める。#のあとにスペースが無くても2つ以上あってもダメ。

# No:
a = 1  #comment
a = 1  #  comment

# Yes:
a = 1  # comment

ブロックコメント E265: block comment should start with '# ' ブロックコメントはコメント内でインデントされたテキストでない限り#とスペースひとつから始める。#のあとにスペースが無いとダメ。 E262と異なりスペース2つ以上でもOKだが、これはコメント内でのインデントのため。不要なスペースはないほうがいい。

# No:
#comment

# Yes:
# comment
#     indented comment

E266: too many leading '#' for block comment 先頭の#はひとつだけです。

# No:
## comment

# Yes:
# comment

トリプルクォートの複数行コメントとしての利用

関数(defブロック)やクラスなどの先頭の文字列に説明を記述するdocstring(ドキュメンテーション文字列)という仕組みがあります。詳細は

def test(a, b):
    '''docstring
    description
    '''
    print(a)
    print(b)

シングルクォート'、ダブルクォート"を3つつなげたトリプルクォート(''', """)で囲むことで改行を含めた文字列を生成することができるため、docstringではトリプルクォートが使われることが多い。

文字列を単独で記述してもコードの処理に影響を与えないので、docstring以外でもトリプルクォート(三重引用符)が複数行のコメントやコメントアウトとして利用されている場合があります。

a = 1
'''
b = 2
c = 3
d = 4
'''
e = 5

トリプルクォート(三重引用符)はあくまでも文字列なので、#によるコメントのように実行時に無視されるわけではない。例えば、インデントされているブロックの中でトリプルクォートをコメントとして利用しようとする場合、インデントをあわせないとエラーになります。 インデントがあっていると問題ありません。

def test(a, b):
    print(a)
    '''
    comment line1
    comment line2
    comment line3
    '''
    print(b)

インデントがあっていないとエラーIndentationError。

def test(a, b):
    print(a)
'''
comment line1
comment line2
comment line3
'''
    print(b)

# IndentationError: unexpected indent

#によるコメントは実行時に無視されるのでインデントがあっていなくてもエラーにはならない。が、コードとしての可読性を良くするにははインデントをあわせたほうがいい。

def test(a, b):
    print(a)
    # comment line1
    # comment line2
    # comment line3
    print(b)

def test(a, b):
    print(a)
# comment line1
# comment line2
# comment line3
    print(b)

いずれにせよトリプルクォートはコメントではなく文字列なので、公式の仕組みであるdocstring以外ではコメントとしてトリプルクォートを使わないほうが無難だと思います。 VS Codeなどのエディタでもショートカット(command + /またはcontrol + /)によるコメントアウトでは一行の場合も複数行の場合も#が使われる。

関数アノテーションによるコメント

Python3.0以降では関数アノテーション(Function Annotations)という仕組みによって関数の引数や返り値にアノテーション(注釈)となる式を記述することができます。

def func_annotations_type(x: str, y: int) -> str:
    return x * y

関数アノテーションは単なる注釈なので、上の例のように型を記述した場合でも実行時に型チェックされたりはしないが、IDEやエディタによってはその情報をもとに処理を行うものもあります。

Last Updated: 6/26/2019, 10:34:03 PM