PEP 8(Python Enhancement Proposal 8)はPythonのコードスタイルガイドで、読みやすく一貫性のあるコードを書くための指針を提供しています。以下に、主要な命名規則と良い変数名の付け方を説明します。
変数名と関数名
変数名と関数名は、小文字のみを使用し、単語間はアンダースコア(_)で区切ります。これをスネークケースと呼びます。
# 良い例
user_name = "Alice"
total_count = 42
calculate_average = lambda x, y: (x + y) / 2
# 悪い例
UserName = "Bob" # クラス名のような大文字始まりは避ける
totalCount = 100 # キャメルケースは避ける
定数
定数は全て大文字で、単語間はアンダースコアで区切ります。
MAX_CONNECTIONS = 1000
DEFAULT_TIMEOUT = 30
PI = 3.14159
クラス名
クラス名はキャメルケース(各単語の先頭を大文字)を使用します。
class UserProfile:
pass
class DatabaseConnection:
pass
メソッド名
メソッド名は関数名と同じく、スネークケースを使用します。
class Car:
def start_engine(self):
pass
def apply_brakes(self):
pass
プライベート変数やメソッド
クラス内でのみ使用する予定の変数やメソッドは、名前の前にアンダースコアを1つ付けます。
class BankAccount:
def __init__(self):
self._balance = 0 # プライベート変数
def _update_balance(self): # プライベートメソッド
pass
特殊メソッド(マジックメソッド)
特殊メソッドは前後にダブルアンダースコアを付けます。
class CustomList:
def __init__(self):
self.data = []
def __len__(self):
return len(self.data)
良い変数名の付け方
変数名は短すぎず、長すぎず、その変数の役割を明確に表すものが良いです。
# 良い例
user_age = 25
is_active = True
items_count = len(items)
# 悪い例
a = 25 # 意味が不明確
is_it_active_or_not = True # 長すぎる
cnt = len(items) # 略語は避ける
イテレータ変数
短いループでは、i
, j
, k
などの単一文字の変数名を使用することも一般的ですが、長いループや複雑な処理では、より意味のある名前を使用します。
# 短いループの例
for i in range(3):
print(i)
# 長いループや複雑な処理の例
for user in active_users:
process_user_data(user)
ブール変数
ブール変数には、is_
, has_
, can_
などのプレフィックスをつけると、その変数が真偽値を表していることが明確になります。
is_logged_in = True
has_permission = False
can_edit = check_user_rights(user)
これらの規則に従うことで、コードの可読性が向上し、他の開発者(将来の自分も含めて)がコードを理解しやすくなります。
最後に、実際のコード例を見てみましょう。
class LibraryBook:
MAX_CHECKOUT_DAYS = 14
def __init__(self, title, author):
self.title = title
self.author = author
self._is_checked_out = False
self._checkout_date = None
def check_out(self):
if not self._is_checked_out:
self._is_checked_out = True
self._checkout_date = self._get_current_date()
return True
return False
def return_book(self):
if self._is_checked_out:
self._is_checked_out = False
self._checkout_date = None
return True
return False
def _get_current_date(self):
# 実際の実装ではdatetimeモジュールを使用するでしょう
pass
def is_overdue(self):
if not self._is_checked_out:
return False
days_checked_out = self._calculate_days_checked_out()
return days_checked_out > self.MAX_CHECKOUT_DAYS
def _calculate_days_checked_out(self):
# 実際の実装では日付の差分を計算するでしょう
pass
このコード例では、PEP 8に準拠した命名規則を使用しています。クラス名、メソッド名、変数名がそれぞれの規則に従っており、各名前からその役割が推測できるようになっています。
これらの規則を意識しながらコードを書くことで、より読みやすく、メンテナンスしやすいPythonプログラムを作成することができます。