[Python入門]コメント:Python入門
Pythonのコメントの種類や、プログラムコードを一時的に無効化するコメントアウト、プログラムを記述したファイルのエンコーディング指定の方法を見ていこう。
* 本稿は2019年4月26日に公開された記事を、Python 3.11.5で動作確認したものです(確認日:2023年9月11日)。
Pythonのプログラムには「コメント」を付け加えられる。コメントは、プログラムコードについて、後からそのコードを読む人のためにプログラマーがコード中に残すテキスト情報のこと。これについて、今回は見ていこう。
コメントとは
コメントとは「プログラムの内容について記述したテキスト」であり、プログラム中に書いておくことで、後から自分(あるいは別のプログラマー)がコードを読むときに参考となるものだ。Pythonではコメントは「#」記号で始まり、そこから行末までは全てコメントになる。コメントがプログラムとして実行されることはなく、Pythonプログラムの実行時には一切無視される。
例として、第4回「変数とは」で見た、円の円周と面積を求めるコードにサンプルとしてのコメントを付けたものを以下に示す。なお、以下のコメントはあくまでも例であり、実際にコメントを記すときには「コードを見れば分かること」は書かずに、「そこでしていることの意味」「なぜこのコードを書いているのか」「注意点」など「後からコードを読み返すときに意味のあること」を記述するのがよい。
# ここから行末までは全てコメント
# r = 0
# 上の行はコメントなので変数rは定義されない
PI = 3.14 # 定数(このようにPythonのコードに続けてコメントを書いてもよい)
r = 1 # 変数rはここで定義される
print(2 * PI * r)
print(PI * r ** 2)
r = 2 # rの値を変更
print(2 * PI * r)
上記のコードをセルに入力すると、次のようになる。
コメント部分の色が変わり、それがコメントであることが一目で分かるようになっている。実行結果を以下に示す。コメントがプログラムの動作に影響を与えていないことが分かるはずだ。
多くのエディタやIDE(統合開発環境)で、Pythonをサポートしているものでも、コメントが色を変えて表示される。例えば、以下はマイクロソフトが提供するテキストエディタである「Visual Studio Code」で新規Pythonファイル(.pyファイル)を作成して、上のコードを入力したところだ。
文字列に含まれる文字「#」はコメントではないことには注意しよう。
# これはコメント
text = '# これはコメントではない'
print(text) # これはコメント
ブロックコメントとインラインコメント
コメントの中でも、行頭に「#」記号があり、その行が全てコメントである場合、それらを「ブロックコメント」と呼ぶことがある(関数定義などにコメントを含む場合、行頭に空白文字でインデントを付けることもある)。これに対して、行の途中にコメントを記述した場合、それらを「インラインコメント」と呼ぶことがある。どのみちコメントなので、さほど気にする必要はないが、Webで情報を検索していると、そのような表現に当たるかもしれないので頭の片隅に置いておこう。先ほどのコードをブロックコメントとインラインコメントに分けると次のようになる。
Pythonのコーディングスタイルガイドでは、コメントを記述するときには、以下のルールに従うことが推奨されている。
コメント | 推奨されるルール |
---|---|
ブロックコメント | 「#」記号と1つの空白文字で始める インデントのレベルをそろえる ブロックコメントが複数の段落で構成されるときには、段落間に「#」記号1つだけのコメント行を挟む ブロックコメントはその下にあるコードの一部または全体について説明したものとする |
インラインコメント | 「#」記号と1つの空白文字で始める Pythonのプログラム(文)とコメントの間には空白文字を2つ以上入れる コードを見れば分かることをインラインコメントに書くのは不要なことであり、目障りとなる |
コメント記述に関して推奨されるルール |
また、英語圏以外のプログラマーに向けては「自分たちの言葉を解さない人が読む可能性が全くないときを除いて、コメントは英語で書くようにしてくれますか」(意訳)とある。上記の推奨事項とお願いに従って、コメントは記載するようにしよう(そういう意味では、上の日本語コメントは微妙だが、本連載では今後も日本語でコメントを入れていくことにする)。
コメントアウトによるプログラムコードの無効化
また、先ほどのサンプルコードの2行目の「# r = 0」という行のように、コメント中にPythonのコードを書いても、それはあくまでもコメントなので実行されることはない。このことを利用して、プログラムの動作確認時に、プログラムの一部をコメント化することもある(これを「コメントアウト」と呼ぶ)。例えば、上の面積を求める部分をコメントアウトするには、その行頭に「#」記号を挿入するだけだ。
PI = 3.14
r = 1
print(2 * PI * r)
# print(PI * r * r) # 面積を計算して表示する行をコメントアウトする例
r = 2 # rの値を変更
print(2 * PI * r)
元のコードをコピー&ペーストして、1つはコメントアウトして残しておいて、もう1つのコードを改変して、それらの行の動作を比べるなどの使い方をする。動作を比べた後には、コメントアウトしたコードは削除して新しいコードを残すか、逆に新しいコードは破棄して元のコードのコメントアウトを外すことになるだろう。本来のコメントとは違う使い方だが、こうしたこともよく行われる。
Pythonファイルのエンコーディング宣言
本連載では、JupyterLabのノートブックを使って、プログラムコードを入力、実行しているが、Pythonコードを含んだテキストファイル(拡張子は「.py」)を、エディタなどを使って作成することもある。そのときには、.pyファイルの「エンコーディング宣言」が必要になることがある。
Python 3では、Pythonコードを含んだファイルのデフォルトのエンコーディング方式は「UTF-8」と決められている。よって、UTF-8エンコーディングでファイルを保存していれば、エンコーディング宣言については気にしないでよい。だが、エンコーディング宣言はコメントを使って行うため、コメントの説明の一環として、以下ではエンコーディング宣言の仕方を見ていく(pythonコマンドによるプログラムの実行やエディタの説明などは省略するので、そういうものだと思いながら読んでほしい)。
例えば、以下はVisual Studio Codeで先ほど作成した.pyファイルを表示しているところだ。ウィンドウ最下部のステータスバーに「UTF-8」とあり、このファイルがUTF-8エンコーディングで保存されていることが分かる。
Pythonはプログラムファイルを読み込む際に、特に指定がなければ、それをUTF-8形式でエンコーディングされているものとして扱う。そうでない場合には、エンコーディング方法を.pyファイルで指定しておく必要がある。これが「エンコーディング宣言」であり、宣言はコメントを使って行う。
といっても、単純には、「coding=エンコーディング名」または「coding: エンコーディング名」を含んだコメントをファイルの先頭(1行目か2行目)に書くだけだ。Pythonのドキュメントでは、以下の2つの書き方が推奨されている。
- # -*- coding: エンコーディング名 -*-
- # vim:fileencoding=エンコーディング名
例えば、先ほどのファイルをVisual Studio Codeで「シフトJIS」形式で保存してみよう。
すると、そのファイルにはエンコーディング宣言が必要になる。これを付けずに、pythonコマンドで実行すると、次のようになる。
「このファイル(comments.py)はUTF-8ではないコードで始まっているけれど、エンコーディング宣言がない」というエラーが発生している。そこで、エンコーディング宣言を追加しよう。ここでは1行目に以下を追加する。
# coding: Shift_JIS
もちろん、上で推奨されていると述べた記述方法に従って「# -*- coding: Shift_JIS -*-」あるいは「# vim:fileencoding= Shift_JIS」などとしてもよい。また、シフトJISでエンコーディングされているファイルについては「Shift_JIS」以外に「shift-jis」や「sjis」と書いてもよい。このコメントを追加してから、pythonコマンドでこのファイルを実行すると次のようになる。
このように、UTF-8以外のエンコーディングでファイルを保存しているときには、コメントを利用したエンコーディング宣言が必要になる。テキストエディタやIDEでプログラムを書くときには、多くの場合、ファイルをUTF-8エンコーディングで保存できるので、通常はそうしておくことをお勧めする。それ以外のエンコーディングを選択しなければならないときには、今述べた方法でエンコーディング宣言を行う。
なお、「エンコーディング宣言を1行目か2行目に記述する」というのは、1行目に「シバン」行と呼ばれる記述を行う場合があるからだ。詳しい説明はしないが、これは「UNIXやmacOSなどで、Pythonなどのコードを含んだテキストファイルを、他のコマンドと同じく、コマンドラインから起動できるようにする」ためのものだ(Windowsでも有効ではある)。簡単な例を以下に示す。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ここから行末までは全てコメント
# r = 0
# 上の行はコメントなので変数rは定義されない
PI = 3.14 # 定数(このようにPythonのコードに続けてコメントを書いてもよい)
r = 1 # 変数rはここで定義される
print(2 * PI * r)
print(PI * r ** 2)
r = 2 # rの値を変更
print(2 * PI * r)
このような記述をすることがあるので、エンコーディング宣言は「1行目か2行目」に書くことになっている。
まとめ
今回は、Pythonのコメントの役割や書き方、プログラムをコメントアウトする方法、エンコーディング宣言の書き方などについて見た。次回は、より複雑なプログラムを書くための仕組みである「for文」「while文」について見ていこう。
今回のまとめ:コメント
- コメントは「#」で始まり、そこから行末まではプログラム実行時に無視される
- コメントには1行全体(が連続して複数行)がコメントとなるブロックコメントと、プログラムコードの右側に書くインラインコメントがある
- コメントを始める「#」の後には空白文字を1つ入れることが推奨されている
- コメントには「そこでしていることの意味」「なぜこのコードを書いているのか」「注意点」など「後からコードを読み返すときに意味のあること」を記述する
- コメントを利用して、既に書いているコードを一時的に無効化(コメントアウト)できる
- コメントは、Pythonプログラムを格納しているテキストファイルのエンコーディング方式を指定する「エンコーディング宣言」の記述でも使用する
「Python入門」
Copyright© Digital Advantage Corp. All Rights Reserved.