コメントアウト
前回、Pandasのread_csvでcsvファイルを読み込んだ際の読み込む列の指定方法を紹介しました。
今回はPythonでコメントアウトする方法を紹介します。
コメントアウトとはプログラム上にプログラムとしては実行されないコメントを書く方法です。
コメントを書いておくことで例えば変数がどういう変数なのか、リストのそれぞれの要素がどういう要素なのか、またある部分のプログラムがどういう処理をしているのかなど残すことができます。
チームでプログラミングしている場合はもちろん、一人でプログラミングしている場合でも時間が経つと詳細を忘れてしまうので、コメントを残しておく方が後々の自分のためになったりします。
(と言いつつ私はあまり書かなくて苦労するタイプです…)
それでは始めていきましょう。
#でコメントアウト
まずは「# 」を使ってコメントアウトする方法です。
「#」を行の先頭に置くとその行がコメントアウトされた行となり、プログラムとして実行されません。
例えばこんなプログラムがあったとします。
x = 10
y = 20
z = 30
print(x)
print(y)
print(z)
実行結果
10
20
30
ここで「print(x)」の前に「#」を置いて実行してみます。
x = 10
y = 20
z = 30
# print(x)
print(y)
print(z)
実行結果
20
30
「print(x)」が実行されなかったため、「10」は表示されません。
複数行コメントアウトする場合、すべての行の先頭に「#」をおきます。
x = 10
y = 20
z = 30
# print(x)
# print(y)
print(z)
実行結果
30
行の先頭ではなく、途中に「#」を置いた場合はその行のそれ以降の部分は実行されなくなります。
x = 10
y = 20
z = 30
print(x) # print(y)
print(z)
実行結果
10
20
変数の説明などはこの様に変数の後ろをコメントアウトした方が読みやすいかもしれません。
クォーテーションでコメントアウト
コメントアウトするもう一つの方法としてクォーテーションでコメントアウトする方法があります。
この場合、「”’」と三つの連続したクォーテーションを2つ使い、囲まれた場所がコメントアウトされます。
x = 10
y = 20
z = 30
print(x)
'''
print(y)
'''
print(z)
実行結果
10
30
シングルクォーテーション(’)だけではなく、ダブルクォーテーション(”)でもコメントアウトできます。
x = 10
y = 20
z = 30
print(x)
"""
print(y)
"""
print(z)
実行結果
10
30
クォーテーションでコメントアウトする場合、囲まれた部位が全てコメントアウトされるので「#」のように各行にそれぞれ対応する必要はありません。
x = 10
y = 20
z = 30
'''
print(x)
print(y)
'''
print(z)
実行結果
30
なぜクォーテーションでコメントアウトする場合は3つ(”’)なのか?
なぜクォーテーションでコメントアウトする場合は、クォーテーションを3つ並べなければいけないのでしょうか?
実はここに「#」でコメントアウトする場合との大きな違いがあります。
「#」でコメントアウトする場合は”プログラムとして実行されません”。
しかし「”’」でコメントアウトする場合は”プログラムとして実行されています”。
このプログラムとして実行されているかされていないかが大きな違いとなります。
クォーテーションである文字を囲むと「文字列」として認識されるのはご存知の通りです。
そのため皆さんが最初に書いただろうプログラム「Hello World!」では、表示したい文字列である「Hello World!」がクォーテーションで囲まれています。
print("Hello World!")
実行結果
Hello World!
ここで「print」を書かずに「”Hello World!”」だけを書いた場合、「”Hello World!”」は文字列として認識されるだけで、表示はされません。
"Hello World!"
実行結果
注)Jupyter Notebookを使っている場合は「”Hello World!”」とだけ書くと、ご親切にも「’Hello World!’」と返してくれます。
この場合、プリント関数を使って何かを表示させると「’Hello World!’」は表示されなくなります。
"Hello World!"
print("Goodbye")
実行結果
Goodbye
つまり「”’」を使ったコメントアウトはプログラムを文字列として認識させて実行させている状態です。
ではなぜクォーテーションが連続して3つなのでしょうか。
クォーテーションに囲まれた部分が文字列として認識されるため、クォーテーションが連続して2つだと、その間、何もないところが文字列として認識されるだけです。
つまり連続した2つのクォーテーションで囲まれた場所は文字列として認識されず、プログラムとして実行されます。
x = 10
y = 20
z = 30
''
print(x)
''
print(y)
print(z)
実行結果
10
20
30
ちなみに「”print(x)”」とすると「SyntaxError」がでます。
x = 10
y = 20
z = 30
''print(x)''
print(y)
print(z)
実行結果
Cell In[39], line 5
''print(x)''
^
SyntaxError: invalid syntax
ではクォーテーションが1つの場合はどうでしょうか。
x = 10
y = 20
z = 30
'print(x)'
print(y)
print(z)
実行結果
20
30
ちゃんとコメントアウトできています。
ただ実は問題はコメントアウトする範囲に文字列が含まれている場合です。
x = 10
y = 20
z = 30
'
print('a')
'
print(y)
print(z)
実行結果
Cell In[40], line 5
'
^
SyntaxError: unterminated string literal (detected at line 5)
ここでクォーテーションを3つにするとさらにその外側から文字列として認識させるため、コメントアウトすることができます。
x = 10
y = 20
z = 30
'''
print('a')
'''
print(y)
print(z)
実行結果
20
30
ブロック内のコメントアウト
この「#」と「”’」の違いはfor文やif文、while文などのブロック内のコメントアウトでも影響します。
例えばこんなプログラムがあったとします。
x_num = 10
for x_val in range(x_num):
print(x_val)
print(x_val*10)
print(x_val*20)
実行結果
0
0
0
1
10
20
2
20
40
3
30
60
4
40
80
まずは「#」を使って「print(x_val*10)」をコメントアウトしてみます。
x_num = 5
for x_val in range(x_num):
print(x_val)
# print(x_val*10)
print(x_val*20)
実行結果
0
0
1
20
2
40
3
60
4
80
ちゃんとコメントアウトすることができました。
ここで少し意地悪をして、コメントアウトする部分のインデントの数を変えてみます。
x_num = 5
for x_val in range(x_num):
print(x_val)
# print(x_val*10)
print(x_val*20)
実行結果
0
0
1
20
2
40
3
60
4
80
こちらも問題なくコメントアウトできました。
次に「”’」でコメントアウトしてみます。
x_num = 5
for x_val in range(x_num):
print(x_val)
'''
print(x_val*10)
'''
print(x_val*20)
実行結果
0
0
1
20
2
40
3
60
4
80
問題なくコメントアウトできました。
こちらも意地悪してインテンドの数を変えてみます。
x_num = 5
for x_val in range(x_num):
print(x_val)
'''
print(x_val*10)
'''
print(x_val*20)
実行結果
Cell In[48], line 5
'''
^
IndentationError: unexpected indent
エラーとなりました。
これは「”’」は行全体がコメントアウトされるわけではないこと、文字列として認識されるだけであって、プログラムとしては実行されているため、「”’」のインデントの位置がずれているとエラーとなります。
つまりこの形なら正しく実行されます。
x_num = 5
for x_val in range(x_num):
print(x_val)
'''
print(x_val*10)
'''
print(x_val*20)
実行結果
0
0
1
20
2
40
3
60
4
80
ということでコメントアウトに関する色々なパターンを紹介しました。
実は「”’」でコメントアウトする方法をいままで知らなかったので、まだまだ知らないことがたくさんあるなぁと感じた記事でした。
次回はPythonのfor文やWhile文でループの先頭に戻るcontinueを紹介します。
ではでは今回はこんな感じで。
コメント