
スポンサーリンク
PEP8とは
PEP8は、Pythonのコーディング規約です。
以下3つの分類に分かれます。
- コードのレイアウト
- コメント
- 命名規約
※PEPはPython Enhancement Proposal(Python 拡充提案)
の略称。
前提事項
以下、PythonのプロジェクトにPEP8を導入する際の前提事項です。
- プロジェクトで独自の規約がある場合はそちらを優先すること。
- PEP8に準拠することによりコードの可読性が落ちる場合は、読みやすさを優先すること。
余談になりますが、PEP8のドキュメントの冒頭には以下記載があります。
一貫性にこだわりすぎるのは、狭い心の現れである
コードのレイアウト
インデント
- 1つのインデントを半角スペース4つで統一すること。(タブは使用しない)
def function_test() print('test')
- 引数やリストで行が長くなる場合は改行し、括弧の開始部分に要素を合わせること。
# long_arg1とlong_arg3の開始位置を揃える。hoge = row_long_function_test(long_arg1, long_arg2, long_arg3, long_arg4, long_arg5, long_arg6)# 100000000と600000000の位置を揃える。row_long_list = [100000000, 200000000, 300000000, 400000000, 500000000, 600000000, 700000000, 800000000]# long_key1とlong_key3の位置を揃える。row_long_dict = {'long_key1': 'long_value1', 'long_key2': 'long_value2', 'long_key3': 'long_value3', 'long_key4': 'long_value4'}
- 括弧の直後に改行する場合は、1つインデントを入れること。
# var_oneの前に1インデント入れる。hoge = row_long_function_test( arg_one, arg_two, arg_three, arg_four, arg_five, arg_six)# 100000000,700000000の前に1インデント入れる。row_long_list = [ 100000000, 200000000, 300000000, 400000000, 500000000, 600000000, 700000000, 800000000]# long_key1,long_key3の前に1インデント入れる。row_long_dict = { 'long_key1': 'long_value1', 'long_key2': 'long_value2', 'long_key3': 'long_value3', 'long_key4': 'long_value4'}
- 関数定義で引数が多く改行を入れる場合は、2つインデントを入れること。
# 引数部分で、2つインデントを加える。def function_test( arg_one, arg_two, arg_three, arg_four): print(arg_one)
(2つインデントを入れることで、引数部分とコード内容でインデントが揃ってしまい、区別が付きにくくなることを防ぎます。)
- if文が長くなる場合は括弧を加えて改行し、改行後にインデントを2つ入れること。
# 2行目以降の条件部分でインデントを2つ加える。if (var_one == 100 and var_two == 200 and var_three == 300): do_something()
(関数定義と同様に、条件部分とコード内容でインデントが揃ってしまい、区別が付きにくくなることを防ぎます。)
1行の長さ(文字数)
- 79文字以内にすること。
- コメントやdocstringは72文字以内にすること。
- 行が長くなる場合は、括弧や波括弧で囲い、複数行に分割すること。
複数の文を1行で書く
- 原則しないこと。
docstring
- non publicメソッド以外は書くこと。
改行
- トップレベルのクラスや関数は2行分の改行(空行)を入れること。
# クラス・関数ごとに2行空けます。def function_test1(): print('test1')
def function_test2(): print('test2')
class SampleClass(): pass
- クラス内部の関数は1行分の改行(空行)を入れること。
class SampleClass():
def __init__(self): pass
def function_test1(self): print('test1')
- 二項演算子の前で改行すること。
# NGincome = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)# OKincome = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)
importの書き方
- 行を分けて書くこと。
# NGimport os, sys# OKimport osimport sys
クォーテーション
- シングルクォーテーション、ダブルクォーテーションどちらでも可能。(ただし、どちらかに統一すること。)
スペースの入れ方
- 余分なスペースは入れないこと。
# OKspam(ham[1], {eggs: 2})foo = (0,)if x == 4: print(x, y); x, y = y, xspam(1)dct['key'] = lst[index]x = 1y = 2long_variable = 3
# NGspam( ham[ 1 ], { eggs: 2 } )bar = (0, )if x == 4 : print(x , y) ; x , y = y , xspam (1)dct ['key'] = lst [index]x = 1y = 2long_variable = 3
ソースファイルのエンコーディング
- UTF-8を使用すること。
コメント
- コードを修正した場合は、コメントも更新すること。
- コメントはセンテンス(文)にすること。
- 次のセンテンスとの間には半角空白文字を2つ含めること。
- ブロックコメントの各行は「#」で始め、その後に半角空白文字を1つ含めること。
- インラインコメントの利用は極力控えること。
- 自明なことは書かないこと。
ブロックコメントの例
# 変数xの説明x = x + 1
インラインコメントの例
x = x + 1 # 変数xの説明
命名規約
関数名,変数名
- 小文字のみで、単語間をアンダースコアで区切ること。
関数名の例
def sample_func(): return pass
変数名の例
word = "アイウエオ”blur_word = "ぼかす”
クラス名
- キャメルケースで記述すること。
class SampleClass():
(キャメルケースとは、それぞれの英単語の先頭を大文字にする表記方法。)
参考
より詳しいPEP8の詳細は、 こちら のドキュメントをご参照ください。
以上で本記事の解説を終わります。
よいITライフを!