Pythonは可読性の高い言語だとよく言われます。インデントが強制されることで、分岐や繰り返し、関数のスコープなどが一目見ただけでわかるようになっています。
また、言語の特性上、非常に柔軟な書き方ができるため、目的の動作を実現することが簡単にコードに表現することができます。
しかし、これらの言語特性が裏目に出て、次のようなコードを量産する可能性もあります。
このページでは、読みやすいPythonコードを書くためにはどうしたら良いか?ということを、私なりにまとめてみようと思います。
PEP: 8 Python コードのスタイルガイド で公式のスタイルガイドが書かれています。
Guido の重要な洞察のひとつに、コードは書くよりも読まれることの方が多い、というものがあります。この文書で示すガイドラインの目的は、コードを読みやすくするとともに、Pythonで書かれた幅広いコードのスタイルを一貫させることです。PEP 20 にもあるように "可読性重要" です。
Guido さんは、Pythonの生みの親です。
仮に、「自分だけが読むコードだから自分だけ読めればいいんだよ!」のように言いながら、 意味をなさない変数名や、 複雑な引数と戻り値を持つ関数 を導入してしまう人がいます(昔の自分)。
そして、後日読み直してみると、何をやっていたか理解できない・・・。。(あるある
一週間後の自分ですら他人だと思ったほうが良いです。誰もが読めるように スタイルガイドに沿った可読性を意識した優れたPythonコードを書くようにしてください。
せっかくなので、このスタイルガイドを一つずつ例を挙げて読んでいくことにします。
# 関数定義の引数が長くなる時は改行してインデントを深くする
def my_first_func(
long_argument_name_1, long_argument_name_2):
pass
long_argument_name_1 = 1
long_argument_name_2 = 2
# 関数の引数を改行する時は、最初の文字をカッコの位置に揃える
my_first_func(long_argument_name_1,
long_argument_name_2)
# リストの中身を改行するときには、以下のようにする
my_list = [
"a", "b", "c",
"d", "e", "f", # 最後に , をつけても良い
]
v = 1.0 # [m/s]
m = 1.0 # [kg]
g = 9.8 # [m/s^2]
h = 10 # [m]
some_energy = 1.0 # [J]
# 長い数式はカッコに包んで、演算子を行の最初に持ってくる
energy = (m * v**2 / 2
+ m * g * h
+ some_energy)
ファイルの先頭にずらっと並びがちなライブラリのインポートの文も見やすくしましょう。
# [Good] ライブラリごとにインポート文は分ける
import os
import sys
# [Bad] まとめてインポートする
import os, sys
# [Good] ライブラリ内のインポートはまとめて良い
from pandas import DataFrame, Series
# [Bad] ワイルドカードを用いたインポートは避ける
from numpy import *
my_list = [1, 2, 3]
# [Good] , や : の後に空白文字を入れる
my_first_func(my_list[1], {"args": 2})
# [Bad] カッコの直後に空白文字
my_first_func( my_list[ 1 ] , { "args" : 2} )
リストのスライスの指定も空白文字を入れる位置に気をつけましょう。
start, end = 0, 2
s1, s2 , e1, e2 = 0, 1, 1, 1
# [Good] 空白文字を入れない
my_list[start:end]
# [Good] 演算部分には空白文字を入れない( : の周りだけ入れる)
my_list[s1+s2 : e1+e2]
# [Good] 演算部分にも空白文字を入れる
my_list[s1 + s2 : e1 + e2]
# [Bad] 片方に偏ってる
my_list[start: end]
PEP: 8 Python コードのスタイルガイドによると、
英語を話さない国出身の Python プログラマの方々へ:あなたのコードが、自分の言葉を話さない人に 120% 読まれないと確信していなければ、コメントを英語で書くようにお願いします。
とあります。
科学技術計算でPythonコードを書く場合、必ず 英語 でコメントを書くようにしましょう。
AtomやVS CodeといったエディタにPEP8のスタイルチェックをしてくれる拡張機能を追加しておくと大変便利です。
PyCharm, Spyderといったエディタにはデフォルトでチェックする機能がついているので、ぜひ有効にして見てください。