みなさんは、コーディングをしているときにコーディング規約を意識して書いていたりしますか? 動くだけではなく、他の人や未来の自分に向けて読みやすいコードを書くためには守ることは大事ですよね!今回の記事では、pythonにおけるコーディング規約として有名な "PEP8"について紹介していきたいと思います!
PEP8とは?
python の コーディング規約で "Python Enhancement Proposal" の 8番目のものという意味です。
開発チーム内でのルールがある場合は、この限りではないですが基本的にここで書かれている規約に準拠して書いていくことで統一された書き方ができます!
コーディング規約 (前編)
PEP8に書かれていることは多いのでその一部を紹介していきますが、前後半に分けて記事にまとめていきます!(今回はその前編です!)
コードレイアウト
インデント
- インデントを行うときは、スペースを4つ使う!
- かっこ を用いて複数行を書くときは、かっこの位置をそろえる
- 引数とそれ以外の区別をつけるために、インデントを加える
タブ or スペース
インデントを行うときに、原則としてはタブとスペースを混ぜることは許されていません。
そして、基本的にはスペースを使うことが推奨されているので、タブで既に書かれているコード以外は「スペース」を用いると覚えておくと良いと思います。
1行の長さ
横に長くならないようにするために1行の文字数が定められています。
- 1行の長さは 80文字未満
- (docstring や コメントは 72文字以下)
2項演算子は 改行前?改行後?
,(カンマ)は行末に書くので、2項演算子も改行前に書いてしまっている人も多いのでは?と思いますが、PEP8で推奨されている書き方は 改行後に書くという書き方です。
演算子とオペランドが離れてしまうことで演算子がどこにかかっているかをわかりやすくするためだそうです。
# 非推奨
sum = (first_num +
second_num -
third_num)
# 推奨
sum = (first_num
+ second_num
- third_num)
空行
- トップレベルの関数 や クラス : 上下に2行ずつ
- クラス内部の メソッド : 上下に1行ずつ
エンコーディング
- 標準ライブラリ UTF-8 以外の利用はテスト目的のみ
import
- 1行で importするのは 1つだけ
(ただし、from を用いた後のimportは例外) - importする順番は下記の通りに3つに分けて、その間には1行空行を加える
1.Pythonの標準ライブラリ
2.サードパーティのライブラリ
3.自作のもの - ワイルドカード(*)を用いたインポートは極力避ける
(何をimportしているかがわかりにくくなるため)
# 非推奨
import local_one
import time
import os, sys
import third_party_one
# 推奨
import os
import sys
import time
import third_party_one
import local_one
モジュールレベルのアンダーネーム
__all__
, __version__
などは、モジュールのdocstringの後に書く
文字列のクォーテーション
シングルクォーテーション と ダブルクォーテーションは同じ意味だが、ルールを決めて使用することを推奨されている
- “ ”で囲まれている中での引用符は ‘ ’ を使う (逆もしかり)
- “”” “”” (3重のクォーテーション)に囲まれている中での引用符は、常に “ ”を用いる
空白の扱い
Pet Peeves
余分な空白は入れない!
具体的には、以下の部分には空白は入れない!
- カッコ や ブラケットの直後と直前
- カッコ内の 末尾のカンマと閉じカッコの間
- カンマ や セミコロン, コロン の直前
- スライスなどで : (コロン)を使うときは、その直前直後
- 代入(=)や演算子の位置をそろえるための空白
その他に推奨されていること
- 行末に余分な空白を残さない
(見た目では見えないがエラーをはく原因となる可能性あり) - 代入 (=), 拡張代入 (+=, -= など), 比較 (==, <, >, !=, <>, <=, >=, in, not in, is, is not), 論理値 (and, or, not) などの演算子の前後には 1つずつ空白をいれる。
- 優先順位が異なる演算子を1行で使用するときで、整理をしたいとき : 優先順位の低い演算子の前後にスペースを追加する。
コメント