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

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

Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:1,215 / 総アクセス数:264 views

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の詳細は、 こちら のドキュメントをご参照ください。

Pythonユーザにお勧めの本

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

独習Python

難易度
実用性
網羅性

言語仕様を深く解説。なんとなく書ける状態から、自信を持って書ける状態へ引き上げてくれます。

Python1年生 第2版 体験してわかる!会話でまなべる!プログラミングのしくみ

難易度
実用性
読みやすさ

イラスト中心で、プログラミングの楽しさを教えてくれる。ワクワクしながら学べる入門書です。


以上で本記事の解説を終わります。
よいITライフを!

Pythonユーザにお勧めの本

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

人気記事


記事を評価

Thanks!
目次
Scroll to Top