pythonでコーディングルール ~①PEP8の確認~

今回はpythonコーディングルールのとっかかりとして、デファクトスタンダードともいえるPEP8を勉強してみました。
普段業務ではC言語を使っているのですが、職場の厳密なコーディングルールに基づいてコーディングを行っております。ベースはMISRA Cに則りつつ、独自の命名規則や判定処理の記載方法など様々なルールが定められております。
一方で本ブログで私が扱っているpythonのコードについては、私がpythonの初心者かつ特に必要性をこれまで感じてこなかったことから、あまり一貫性のあるコードをかけておりませんでした。
そこでpython学習の次のステップアップとして、万人受けするようなpythonコードの記述が出来るようになりたいと思います。
PEP8とは
まず、PEPとはPython Enhancement Proposalsの略で、その目的およびガイドラインはPEP1に記載されています。要約すると、PEPはpythonを使っていくうえでこうした方がいいんじゃないかという意見を集約させたものになります。
その中でも、PEP8はPythonコードのコーディング規約に関してまとめた章です。今回はこのPEP8の中から、実際にコーディングするうえで意識すべき部分を読み込んでいきます。
ただし、PEP8の「プログラミングに関する推奨事項」については検討事項が多いため今回割愛します。
PEP8のコーディングルール
以下にざっくりとしたまとめ資料を用意しましたためこちらも参考にしてください。
ソースファイルのエンコーディング

空行

モジュールレベルの二重アンダースコア変数名

1行の長さ

末尾のカンマ

引用符

import

改行

インデント

正直私はインデントはタブ派なのですが、郷に入っては郷に従えということで今後はスペースを使うようにします。
以下は5年以上前の記事になりますが、タブ派は実は少数派なんですね。
式や文中の空白文式や文中のスペース

スペースは極力使わない方がいいんですね。特に私の場合、括弧周りはよく空白を入れておりました。
コメント

文章として成り立たせるというのは当たり前のように感じますが、守れてないコード見たことありますよね。
あと英語はやっぱり勉強しといたほうがいいか。
命名規則

よく知らない単語がいろいろ出てきましたね。以下で補足します。
CapWords方式
単語の先頭は大文字で始めて、名前が複数の単語でつづられるときには、それらをアンダースコアなどを使わずにつなげる命名法。
__all__
「__all__」は変数や関数をモジュールの外に公開するかどうかを指定したいときに使用します。詳細については以下が参考になります。
mixedCase
アンダースコアを使わず単語の頭を大文字にする。ただし先頭の文字は小文字にする。
そんなに使うケースはないそうです。
マングリング機構
クラス内で定義された変数のうち、ダブルアンダースコア(__)が先頭について、ダブルアンダースコア(__)で終わらない変数については勝手に名前修飾を行う。修飾した名前は_クラス名__変数名となる。
最後に
ちゃんと読んでみると自分の知らないことや見当違いだったこと、あるいはためになるようなことが多々ありました。
しかし、PEP8で何よりも重要視されていることはルールを守ることではなく、一貫性を保つことであると明言されています。
「一貫性にこだわりすぎるのは、狭い心の現れである」
そのため、何が何でもPEP8の記載通りに合わせなきゃいけないという考えは危険です。
他にもコーディングルールに関する情報は多々あるため、今後もこのような調査に取り組んでいき自分なりのコーディングルールを確立していきたいと思います。