pep8のすゝめ
はじめに
今年も始まりました、毎年恒例のアドベントカレンダー。B4以外のみなさんはお馴染みだと思いますが、改めて簡単に説明をしましょう。12/1~12/25の25日間、有志のみなさんでブログを書く企画です。初日の今日は僕、日暮が書きます。テーマはずばり!
きれいなコードの書き方(Python編)
櫻井研の公用語になりつつあるプログラミング言語といえばPythonですね。TensorFlowをはじめChainerやCaffeなどほとんどのDeep LearningライブラリーはPythonで動きます。櫻井研でPythonが広まった背景にはこうした事情があるのです。
ところで、Pythonistaのみなさんに質問があります。pep8ってご存知ですか?きれいなコードを書くのに必要不可欠なものです。しかし普段コードを書くときにpep8を意識していない人が多い気がします。そこで今日はみなさんにpep8を知り、使えるようになってほしいと思っています。
pep8とは
legacy.python.org
pep8とはPython公式のコーディング規則です。つまり「このルールに従ってコーディングすればきれいなコードが書けるよ」という魔法のドキュメントです。リンク先には英語で説明が書かれていますが、実際のコードを見ればその効力は一目瞭然です。ご覧ください。
左がpep8コーディングで右がゴミコーディングです。どうですか?左のコードを見ていると、美しくて時が経つのも忘れそうです。ここからは、実際にコードを書くときの注意点を見ていきます。
環境を整える
先ほどの画像をよく見てください。右のゴミコーディングのほうに赤や黄色の警告がたくさん出ています。実はこのSublime Textというエディターではpep8に反したコーディングに対して警告を表示してくれます。他にもemacsなどメジャーなエディターならこの機能はあるはずですので、ぜひ使ってみてください。
空行
詰めすぎのコードは読みにくいため、pep8ではいくつか空行に関する規則があります。そのうち特に意識しなければいけないものは以下の2つです。
- def文の上には空行を2行入れる(def文の上がコメント文の場合はコメント文の上に空行を2行入れる)
- ファイルの最後には空行を1行入れる
演算子
原則
+, -, *, /, %, =, ==, <, >などの演算子の前後にはスペースを1つ入れます。
例外
パラメータを指定する場合はスペースを入れません。具体例を見てみましょう。上がゴミコーディングで下がpep8コーディングです。
parser.add_argument('end','--end','-e',default=20,type=int,help='End Number') ↓ parser.add_argument('end', '--end', '-e', default=20, type=int, help='End Number')
スペース
他にも,(カンマ)の後ろにはスペースを入れます。前には入れないことに注意してください。
文字数
これが一番回避するのが難しいルールですが、1行あたりの文字数は79文字までです。今回のコードのように文字列を入れるときや、ファイル名を指定するときなど、このルールが重荷になることがあります。回避方法は大きく分けると2つです。
引数と引数の間で改行
複数の引数がある関数やリストでは途中で以下のように改行することができます。
parser.add_argument('start','--start','-s',default=1,type=int,help='Start Number') ↓ parser.add_argument('--start', '-s', default=1, type=int, help='Start Number')
このとき、2行目を書き始める位置は関数名のあとの(の次の文字の位置からと決まっています。
式の途中で改行
文字列の途中や演算子の直後などに\(バックスペース)を入れることで改行することができます。ただ、これは個人的な意見ですがあまり見た目が美しくないと思うのでなるべく避けています。
最後に
「プログラムなんて動けばいい」と考えている人もいるかもしれません。しかしきれいなコードは読みやすく、読みやすいコードは改良を加えやすいことが多いです。「きれいなコードを書かない人」と「きれいなコードを書けない人」は雲泥の差です。みなさんも今日から美コードプログラマーの仲間入りをしませんか?