Pythonのコーディング規約(PEP8)を解説!

Pythonのコーディング規約(PEP8)を解説!

PEP8はPythonのコーディング規約です。PEP8をコードレイアウト(インデント、文字数、改行など)、コメント、命名規約の3つの分類で解説します。

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')
  • 二項演算子の前で改行すること。
# NG
income = (gross_wages +
          taxable_interest +
          (dividends - qualified_dividends) -
          ira_deduction -
          student_loan_interest)
# OK
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

importの書き方

  • 行を分けて書くこと。
# NG
import os, sys
# OK
import os
import sys

クォーテーション

  • シングルクォーテーション、ダブルクォーテーションどちらでも可能。(ただし、どちらかに統一すること。)

スペースの入れ方

  • 余分なスペースは入れないこと。
# OK
spam(ham[1], {eggs: 2})
foo = (0,)
if x == 4: print(x, y); x, y = y, x
spam(1)
dct['key'] = lst[index]
x = 1
y = 2
long_variable = 3

# NG
spam( ham[ 1 ], { eggs: 2 } )
bar = (0, )
if x == 4 : print(x , y) ; x , y = y , x
spam (1)
dct ['key'] = lst [index]
x             = 1
y             = 2
long_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ライフを!
Scroll to Top