Python変数名のルール|初心者が守るべき命名の基本
Python初心者向けの変数名命名ルールを詳しく解説。基本的なルールから読みやすいコードを書くためのコツまで実例付きで紹介。
変数名で困ったことはありませんか?
みなさん、Pythonで変数を使う時に「どんな名前をつければいいの?」と悩んだことはありませんか?
「変数名は何でもいいの?」 「どんなルールがあるの?」 「読みやすいコードを書くにはどうすればいい?」
このような疑問を持つ方はとても多いです。
実は、良い変数名をつけるコツがあるんです。
この記事では、Python初心者が知っておくべき変数名の命名ルールを詳しく解説します。 基本的なルールから実践的なコーディングのコツまで、読みやすく保守しやすいコードを書けるようになりましょう!
変数名の基本ルール
まず、Pythonで変数名をつける時の絶対に守るべきルールを覚えましょう。
これを知らないとエラーになってしまいます。
使える文字の種類
Pythonで変数名に使える文字が決まっています。
# 使える文字の例name = "田中" # 英字(OK)age1 = 25 # 数字(先頭以外はOK)user_name = "佐藤" # アンダースコア(OK)firstName = "鈴木" # 大文字小文字混在(OK)
print(f"名前: {name}")print(f"年齢: {age1}")print(f"ユーザー名: {user_name}")print(f"名前: {firstName}")
英字、数字、アンダースコアが使えます。
実行結果:
名前: 田中
年齢: 25
ユーザー名: 佐藤
名前: 鈴木
正しい文字を使えば問題なく動作します。
使えない文字の例
これらの文字は使えません。
# 使えない文字の例(エラーになります)# 1st_name = "田中" # 数字で始まる(NG)# user-name = "佐藤" # ハイフン(NG)# total price = 1000 # スペース(NG)# user@home = "鈴木" # @記号(NG)
# 正しい書き方first_name = "田中" # OKuser_name = "佐藤" # OK total_price = 1000 # OKuser_at_home = "鈴木" # OK
print(f"正しい変数名の例:")print(f" first_name = {first_name}")print(f" user_name = {user_name}")print(f" total_price = {total_price}")print(f" user_at_home = {user_at_home}")
特殊文字やスペースは使えません。
実行結果:
正しい変数名の例:
first_name = 田中
user_name = 佐藤
total_price = 1000
user_at_home = 鈴木
アンダースコアで区切るのが正しい方法です。
予約語は使えない
Pythonが特別に使っている単語は変数名にできません。
# 予約語の例(これらは使えません)# if = 10 # if は予約語(NG)# for = 20 # for は予約語(NG)# class = 30 # class は予約語(NG)
# 正しい書き方if_statement = 10 # OKfor_loop = 20 # OKclass_name = 30 # OK
print("予約語を避けた正しい例:")print(f" if_statement = {if_statement}")print(f" for_loop = {for_loop}")print(f" class_name = {class_name}")
# よく使う予約語の例python_keywords = [ "if", "else", "for", "while", "def", "class", "and", "or", "not", "True", "False", "None"]
print(f"避けるべき予約語の例:")print(f" {', '.join(python_keywords[:6])}")print(f" {', '.join(python_keywords[6:])}")
予約語は文法で使われる特別な単語です。
実行結果:
予約語を避けた正しい例:
if_statement = 10
for_loop = 20
class_name = 30
避けるべき予約語の例:
if, else, for, while, def, class
and, or, not, True, False, None
予約語には別の名前を付ける必要があります。
大文字小文字の区別
Pythonは大文字と小文字を別の文字として扱います。
# 大文字小文字の区別name = "田中太郎" # 小文字Name = "佐藤花子" # 最初だけ大文字NAME = "鈴木一郎" # 全部大文字
print("大文字小文字の区別:")print(f" name = {name}")print(f" Name = {Name}") print(f" NAME = {NAME}")print("これらは全て異なる変数です")
# 型も確認print(f"変数の確認:")print(f" name の値: {name}")print(f" Name の値: {Name}")print(f" NAME の値: {NAME}")
同じスペルでも大文字小文字が違えば別の変数です。
実行結果:
大文字小文字の区別:
name = 田中太郎
Name = 佐藤花子
NAME = 鈴木一郎
これらは全て異なる変数です
変数の確認:
name の値: 田中太郎
Name の値: 佐藤花子
NAME の値: 鈴木一郎
混乱を避けるため、統一したルールで書きましょう。
Pythonの推奨スタイル(PEP 8)
Pythonコミュニティで推奨されている書き方があります。
このルールに従うと、他の人が読みやすいコードになります。
snake_case(スネークケース)
変数名は小文字でアンダースコア区切りが推奨です。
# PEP 8推奨のsnake_caseuser_name = "田中太郎"user_age = 25email_address = "tanaka@example.com"is_admin = Truetotal_amount = 15000
print("PEP 8推奨の変数名:")print(f" user_name = {user_name}")print(f" user_age = {user_age}")print(f" email_address = {email_address}")print(f" is_admin = {is_admin}")print(f" total_amount = {total_amount}")
単語をアンダースコアで区切る方法です。
実行結果:
PEP 8推奨の変数名:
user_name = 田中太郎
user_age = 25
email_address = tanaka@example.com
is_admin = True
total_amount = 15000
読みやすくて理解しやすい形式です。
定数は大文字
変更しない値(定数)は大文字で書きます。
# 定数の命名(大文字でアンダースコア区切り)MAX_LOGIN_ATTEMPTS = 3DEFAULT_PAGE_SIZE = 20API_TIMEOUT_SECONDS = 30TAX_RATE = 0.1
print("定数の例:")print(f" MAX_LOGIN_ATTEMPTS = {MAX_LOGIN_ATTEMPTS}")print(f" DEFAULT_PAGE_SIZE = {DEFAULT_PAGE_SIZE}")print(f" API_TIMEOUT_SECONDS = {API_TIMEOUT_SECONDS}")print(f" TAX_RATE = {TAX_RATE}")
# 定数を使った計算price = 1000tax_amount = price * TAX_RATEtotal_price = price + tax_amount
print(f"定数を使った計算:")print(f" 商品価格: {price}円")print(f" 税額: {tax_amount}円")print(f" 合計: {total_price}円")
定数は全て大文字で書きます。
実行結果:
定数の例:
MAX_LOGIN_ATTEMPTS = 3
DEFAULT_PAGE_SIZE = 20
API_TIMEOUT_SECONDS = 30
TAX_RATE = 0.1
定数を使った計算:
商品価格: 1000円
税額: 100.0円
合計: 1100.0円
定数だとひと目でわかるようになります。
避けるべき書き方
Python では一般的でない書き方です。
# 避けるべき書き方の例userName = "佐藤花子" # キャメルケース(避ける)UserAge = 30 # 大文字始まり(避ける)emailaddress = "sato@example.com" # 区切りなし(避ける)ISADMIN = False # 変数なのに大文字(避ける)
print("避けるべき書き方:")print(f" userName = {userName} # キャメルケース")print(f" UserAge = {UserAge} # 大文字始まり")print(f" emailaddress = {emailaddress} # 区切りなし")print(f" ISADMIN = {ISADMIN} # 変数なのに大文字")
# 推奨される書き方user_name = "佐藤花子"user_age = 30email_address = "sato@example.com"is_admin = False
print(f"推奨される書き方:")print(f" user_name = {user_name}")print(f" user_age = {user_age}")print(f" email_address = {email_address}")print(f" is_admin = {is_admin}")
統一感のある読みやすいコードになります。
実行結果:
避けるべき書き方:
userName = 佐藤花子 # キャメルケース
UserAge = 30 # 大文字始まり
emailaddress = sato@example.com # 区切りなし
ISADMIN = False # 変数なのに大文字
推奨される書き方:
user_name = 佐藤花子
user_age = 30
email_address = sato@example.com
is_admin = False
PEP 8に従うと統一感が生まれます。
意味のある変数名をつける
技術的なルールだけでなく、わかりやすい名前をつけることも大切です。
コードを読む人のことを考えましょう。
悪い例と良い例
変数名だけで何かわからない例とわかりやすい例を比べてみましょう。
# 悪い例(何を表すかわからない)d = 7count = 50timeout = 30
print("悪い例(意味が不明):")print(f" d = {d} # dが何なのかわからない")print(f" count = {count} # 何をカウントしているの?")print(f" timeout = {timeout} # 30秒?30分?")
# 良い例(意味が明確)days_until_deadline = 7student_count = 50timeout_seconds = 30
print(f"良い例(意味が明確):")print(f" days_until_deadline = {days_until_deadline} # 期限まで7日")print(f" student_count = {student_count} # 学生数50人")print(f" timeout_seconds = {timeout_seconds} # タイムアウト30秒")
変数名を見ただけで何かわかるようにします。
実行結果:
悪い例(意味が不明):
d = 7 # dが何なのかわからない
count = 50 # 何をカウントしているの?
timeout = 30 # 30秒?30分?
良い例(意味が明確):
days_until_deadline = 7 # 期限まで7日
student_count = 50 # 学生数50人
timeout_seconds = 30 # タイムアウト30秒
具体的で理解しやすい名前にするのがコツです。
関数での比較
関数の中でも意味のある変数名が重要です。
# 悪い例(意味不明な関数)def calc(a, b, c): """悪い例:何を計算するかわからない""" x = a * b y = x - c z = y * 0.1 return z
# 良い例(意味が明確な関数)def calculate_tax_amount(price, quantity, discount): """良い例:税額を計算することが明確""" subtotal = price * quantity discounted_amount = subtotal - discount tax_amount = discounted_amount * 0.1 return tax_amount
# 使用例TAX_RATE = 0.1
print("関数での変数名の比較:")print(f"悪い例: calc(1000, 3, 500) = {calc(1000, 3, 500)}")print(f"良い例: calculate_tax_amount(1000, 3, 500) = {calculate_tax_amount(1000, 3, 500)}")
print(f"良い例では処理の流れが理解できます:")print(f" price = 1000円(単価)")print(f" quantity = 3個(数量)")print(f" discount = 500円(割引)")print(f" subtotal = 1000 × 3 = 3000円(小計)")print(f" discounted_amount = 3000 - 500 = 2500円(割引後)")print(f" tax_amount = 2500 × 0.1 = 250円(税額)")
処理の流れがわかりやすい名前にします。
実行結果:
関数での変数名の比較:
悪い例: calc(1000, 3, 500) = 250.0
良い例: calculate_tax_amount(1000, 3, 500) = 250.0
良い例では処理の流れが理解できます:
price = 1000円(単価)
quantity = 3個(数量)
discount = 500円(割引)
subtotal = 1000 × 3 = 3000円(小計)
discounted_amount = 3000 - 500 = 2500円(割引後)
tax_amount = 2500 × 0.1 = 250円(税額)
計算の意味がわかるコードになりました。
単位や種類を含める
単位や種類を変数名に含めると間違いを防げます。
# 単位を含めた変数名weight_kg = 70 # 体重(キログラム)height_cm = 175 # 身長(センチメートル)age_years = 25 # 年齢(年)timeout_seconds = 30 # タイムアウト(秒)distance_meters = 1500 # 距離(メートル)
print("単位を含めた変数名:")print(f" weight_kg = {weight_kg}")print(f" height_cm = {height_cm}")print(f" age_years = {age_years}")print(f" timeout_seconds = {timeout_seconds}")print(f" distance_meters = {distance_meters}")
# BMI計算の例def calculate_bmi(weight_kg, height_cm): """BMIを計算(単位が明確)""" height_m = height_cm / 100 # センチをメートルに変換 bmi = weight_kg / (height_m ** 2) return round(bmi, 1)
bmi_value = calculate_bmi(weight_kg, height_cm)print(f"BMI計算結果:")print(f" 体重: {weight_kg}kg")print(f" 身長: {height_cm}cm")print(f" BMI: {bmi_value}")
単位がわかると計算ミスを防げます。
実行結果:
単位を含めた変数名:
weight_kg = 70
height_cm = 175
age_years = 25
timeout_seconds = 30
distance_meters = 1500
BMI計算結果:
体重: 70kg
身長: 175cm
BMI: 22.9
単位を明記することで安全な計算ができます。
適切な長さの変数名
変数名は短すぎても長すぎてもいけません。
適切なバランスを見つけましょう。
短い変数名が適切な場合
ループや数学的な処理では短い名前でもOKです。
# 短い変数名が適切な例print("短い変数名が適切な例:")
# 単純なループprint("単純なループ:")for i in range(5): print(f" {i}: こんにちは")
# 数学的な計算def distance(x1, y1, x2, y2): """2点間の距離(数学的なのでx,yでOK)""" dx = x2 - x1 dy = y2 - y1 return (dx**2 + dy**2)**0.5
print(f"2点間の距離:")result = distance(0, 0, 3, 4)print(f" distance(0, 0, 3, 4) = {result}")
# 座標の計算x = 10y = 20print(f"座標:")print(f" x = {x}")print(f" y = {y}")
文脈が明確なら短くてもOKです。
実行結果:
短い変数名が適切な例:
単純なループ:
0: こんにちは
1: こんにちは
2: こんにちは
3: こんにちは
4: こんにちは
2点間の距離:
distance(0, 0, 3, 4) = 5.0
座標:
x = 10
y = 20
数学や単純な処理では短い名前も使えるということがわかります。
長い変数名が必要な場合
複雑な概念や設定値では長い名前が必要です。
# 長い変数名が必要な例print("長い変数名が必要な例:")
# 設定値MAX_DATABASE_CONNECTION_ATTEMPTS = 3USER_SESSION_TIMEOUT_MINUTES = 30EMAIL_VERIFICATION_TOKEN_EXPIRY_HOURS = 24
print("設定値:")print(f" MAX_DATABASE_CONNECTION_ATTEMPTS = {MAX_DATABASE_CONNECTION_ATTEMPTS}")print(f" USER_SESSION_TIMEOUT_MINUTES = {USER_SESSION_TIMEOUT_MINUTES}")print(f" EMAIL_VERIFICATION_TOKEN_EXPIRY_HOURS = {EMAIL_VERIFICATION_TOKEN_EXPIRY_HOURS}")
# 複雑な状態管理is_user_email_verified = Falselast_password_change_date = "2024-01-01"current_user_permission_level = "admin"
print(f"状態管理:")print(f" is_user_email_verified = {is_user_email_verified}")print(f" last_password_change_date = {last_password_change_date}")print(f" current_user_permission_level = {current_user_permission_level}")
# ビジネスロジックdef calculate_employee_annual_bonus(base_salary, performance_score, years_of_service): """従業員の年間賞与を計算""" base_bonus_rate = 0.1 performance_multiplier = performance_score / 100 service_bonus = years_of_service * 0.01 annual_bonus = base_salary * (base_bonus_rate + performance_multiplier + service_bonus) return round(annual_bonus)
# 使用例bonus = calculate_employee_annual_bonus(4000000, 85, 5)print(f"賞与計算例:")print(f" 基本給: 4,000,000円")print(f" パフォーマンス: 85点")print(f" 勤続年数: 5年")print(f" 年間賞与: {bonus:,}円")
重要で複雑な概念は詳しい名前にします。
実行結果:
長い変数名が必要な例:
設定値:
MAX_DATABASE_CONNECTION_ATTEMPTS = 3
USER_SESSION_TIMEOUT_MINUTES = 30
EMAIL_VERIFICATION_TOKEN_EXPIRY_HOURS = 24
状態管理:
is_user_email_verified = False
last_password_change_date = 2024-01-01
current_user_permission_level = admin
賞与計算例:
基本給: 4,000,000円
パフォーマンス: 85点
勤続年数: 5年
年間賞与: 640,000円
複雑な概念は長い名前で明確に表現します。
省略のルール
省略する時のルールがあります。
# 省略のルール例print("省略のルール:")
# 避けるべき省略print("避けるべき省略:")# usr = "田中" # user と書く# cnt = 10 # count と書く # amt = 1000 # amount と書く
# 正しい書き方user = "田中"count = 10amount = 1000
print(f" user = {user} # usr ではなく user")print(f" count = {count} # cnt ではなく count")print(f" amount = {amount} # amt ではなく amount")
# 許容される省略(業界標準)print(f"許容される省略:")user_id = 12345api_url = "https://api.example.com"html_content = "<h1>Hello</h1>"json_data = {"name": "田中"}
print(f" user_id = {user_id} # id は標準的")print(f" api_url = {api_url}")print(f" html_content = {html_content}")print(f" json_data = {json_data}")
# 文脈によって判断print(f"文脈によって判断:")max_size = 1000 # maximum の省略min_value = 1 # minimum の省略temp_file = "temp.txt" # temporary の省略
print(f" max_size = {max_size} # 文脈が明確なら max でOK")print(f" min_value = {min_value} # 文脈が明確なら min でOK")print(f" temp_file = {temp_file} # 文脈が明確なら temp でOK")
業界標準の省略なら使ってもOKです。
実行結果:
省略のルール:
避けるべき省略:
user = 田中 # usr ではなく user
count = 10 # cnt ではなく count
amount = 1000 # amt ではなく amount
許容される省略:
user_id = 12345 # id は標準的
api_url = https://api.example.com
html_content = <h1>Hello</h1>
json_data = {'name': '田中'}
文脈によって判断:
max_size = 1000 # 文脈が明確なら max でOK
min_value = 1 # 文脈が明確なら min でOK
temp_file = temp.txt # 文脈が明確なら temp でOK
読みやすさを最優先に考えます。
実践的な命名テクニック
プロが使っている命名のコツを覚えましょう。
場面に応じた適切な名前の付け方があります。
真偽値(True/False)の命名
True/Falseを表す変数は特別な書き方があります。
# 真偽値の命名パターンprint("真偽値の命名パターン:")
# is_ で始まる(状態を表す)is_logged_in = Trueis_valid_email = Falseis_admin_user = True
print("is_ パターン(状態):")print(f" is_logged_in = {is_logged_in}")print(f" is_valid_email = {is_valid_email}")print(f" is_admin_user = {is_admin_user}")
# has_ で始まる(所有を表す)has_permission = Truehas_error = Falsehas_children = True
print(f"has_ パターン(所有):")print(f" has_permission = {has_permission}")print(f" has_error = {has_error}")print(f" has_children = {has_children}")
# can_ で始まる(能力を表す)can_edit = Truecan_delete = Falsecan_view = True
print(f"can_ パターン(能力):")print(f" can_edit = {can_edit}")print(f" can_delete = {can_delete}")print(f" can_view = {can_view}")
# 実用例def check_user_access(user_level): """ユーザーアクセス権限をチェック""" is_admin = user_level == "admin" can_edit_posts = user_level in ["admin", "editor"] has_read_permission = user_level in ["admin", "editor", "viewer"] return is_admin, can_edit_posts, has_read_permission
# テストadmin_check = check_user_access("admin")editor_check = check_user_access("editor")viewer_check = check_user_access("viewer")
print(f"アクセス権限チェック:")print(f" 管理者: is_admin={admin_check[0]}, can_edit={admin_check[1]}, has_read={admin_check[2]}")print(f" 編集者: is_admin={editor_check[0]}, can_edit={editor_check[1]}, has_read={editor_check[2]}")print(f" 閲覧者: is_admin={viewer_check[0]}, can_edit={viewer_check[1]}, has_read={viewer_check[2]}")
質問形式で考えるとわかりやすい名前になります。
実行結果:
真偽値の命名パターン:
is_ パターン(状態):
is_logged_in = True
is_valid_email = False
is_admin_user = True
has_ パターン(所有):
has_permission = True
has_error = False
has_children = True
can_ パターン(能力):
can_edit = True
can_delete = False
can_view = True
アクセス権限チェック:
管理者: is_admin=True, can_edit=True, has_read=True
編集者: is_admin=False, can_edit=True, has_read=True
閲覧者: is_admin=False, can_edit=False, has_read=True
役割が明確で読みやすいコードになります。
数量やカウンターの命名
数を表す変数にも決まったパターンがあります。
# 数量・カウンターの命名print("数量・カウンターの命名:")
# _count で終わるuser_count = 150error_count = 5retry_count = 3
print("_count パターン:")print(f" user_count = {user_count}")print(f" error_count = {error_count}")print(f" retry_count = {retry_count}")
# num_of_ で始まるnum_of_pages = 10num_of_items = 25num_of_attempts = 3
print(f"num_of_ パターン:")print(f" num_of_pages = {num_of_pages}")print(f" num_of_items = {num_of_items}")print(f" num_of_attempts = {num_of_attempts}")
# total_ で始まるtotal_amount = 15000total_score = 450total_users = 1000
print(f"total_ パターン:")print(f" total_amount = {total_amount}")print(f" total_score = {total_score}")print(f" total_users = {total_users}")
# 実際の統計処理例def calculate_statistics(scores): """点数の統計を計算""" item_count = len(scores) total_score = sum(scores) average_score = total_score / item_count if item_count > 0 else 0 max_score = max(scores) if scores else 0 min_score = min(scores) if scores else 0 return { "item_count": item_count, "total_score": total_score, "average_score": round(average_score, 1), "max_score": max_score, "min_score": min_score }
# テストデータtest_scores = [85, 92, 78, 96, 73, 88]stats = calculate_statistics(test_scores)
print(f"統計計算結果:")print(f" item_count = {stats['item_count']}件")print(f" total_score = {stats['total_score']}点")print(f" average_score = {stats['average_score']}点")print(f" max_score = {stats['max_score']}点")print(f" min_score = {stats['min_score']}点")
何を数えているかわかる名前にします。
実行結果:
数量・カウンターの命名:
_count パターン:
user_count = 150
error_count = 5
retry_count = 3
num_of_ パターン:
num_of_pages = 10
num_of_items = 25
num_of_attempts = 3
total_ パターン:
total_amount = 15000
total_score = 450
total_users = 1000
統計計算結果:
item_count = 6件
total_score = 512点
average_score = 85.3点
max_score = 96点
min_score = 73点
数量の種類が明確になります。
対になる概念の命名
セットで使う変数は対で考えます。
# 対になる概念の命名print("対になる概念の命名:")
# 開始・終了start_time = "09:00"end_time = "17:00"start_date = "2024-01-01"end_date = "2024-12-31"
print("開始・終了:")print(f" start_time = {start_time}, end_time = {end_time}")print(f" start_date = {start_date}, end_date = {end_date}")
# 最小・最大min_age = 18max_age = 65min_price = 100max_price = 10000
print(f"最小・最大:")print(f" min_age = {min_age}, max_age = {max_age}")print(f" min_price = {min_price}, max_price = {max_price}")
# 入力・出力input_file = "data.txt"output_file = "result.txt"input_data = [1, 2, 3, 4, 5]output_data = [x * 2 for x in input_data]
print(f"入力・出力:")print(f" input_file = {input_file}, output_file = {output_file}")print(f" input_data = {input_data}")print(f" output_data = {output_data}")
# 前・後previous_value = 100next_value = 200old_password = "old123"new_password = "new456"
print(f"前・後:")print(f" previous_value = {previous_value}, next_value = {next_value}")print(f" old_password = {old_password}, new_password = {new_password}")
# 実用例:ファイル処理def process_file_data(input_filename, output_filename): """ファイルデータを処理""" print(f"ファイル処理の例:") print(f" 入力ファイル: {input_filename}") print(f" 出力ファイル: {output_filename}") # ファイル処理のシミュレーション raw_data = "元のデータ" processed_data = f"処理済み{raw_data}" print(f" raw_data = {raw_data}") print(f" processed_data = {processed_data}") return processed_data
# 処理実行result = process_file_data("input.txt", "output.txt")
対で使うことが明確になります。
実行結果:
対になる概念の命名:
開始・終了:
start_time = 09:00, end_time = 17:00
start_date = 2024-01-01, end_date = 2024-12-31
最小・最大:
min_age = 18, max_age = 65
min_price = 100, max_price = 10000
入力・出力:
input_file = data.txt, output_file = result.txt
input_data = [1, 2, 3, 4, 5]
output_data = [2, 4, 6, 8, 10]
前・後:
previous_value = 100, next_value = 200
old_password = old123, new_password = new456
ファイル処理の例:
入力ファイル: input.txt
出力ファイル: output.txt
raw_data = 元のデータ
processed_data = 処理済み元のデータ
関連する変数の関係がわかりやすくなります。
よくある間違いと対策
初心者がやりがちな変数名の間違いを覚えておきましょう。
これを避けることで、より良いコードが書けます。
意味のない名前を避ける
何を表すかわからない名前は使わないようにします。
# よくある間違い:意味のない名前print("よくある間違い例:")
# 悪い例# data = "田中太郎" # dataが何のデータ?# info = 25 # infoが何の情報?# temp = "admin" # tempが何の一時的な値?# thing = 1000 # thingが何?
# 良い例user_name = "田中太郎"user_age = 25user_role = "admin"product_price = 1000
print("改善例:")print(f" user_name = {user_name} # ユーザー名のデータ")print(f" user_age = {user_age} # ユーザー年齢の情報")print(f" user_role = {user_role} # ユーザー権限の一時値")print(f" product_price = {product_price} # 商品価格の値")
# 関数での比較def bad_function(data, info, temp): """悪い例:引数の意味がわからない""" result = data + str(info) + temp return result
def good_function(user_name, user_age, user_status): """良い例:引数の意味が明確""" user_summary = user_name + str(user_age) + user_status return user_summary
# 比較bad_result = bad_function("田中", 25, "アクティブ")good_result = good_function("田中", 25, "アクティブ")
print(f"関数での比較:")print(f" 悪い例: bad_function('田中', 25, 'アクティブ') = {bad_result}")print(f" 良い例: good_function('田中', 25, 'アクティブ') = {good_result}")print(f" 結果は同じだが、良い例の方が理解しやすい")
具体的で明確な名前を使いましょう。
実行結果:
よくある間違い例:
改善例:
user_name = 田中太郎 # ユーザー名のデータ
user_age = 25 # ユーザー年齢の情報
user_role = admin # ユーザー権限の一時値
product_price = 1000 # 商品価格の値
関数での比較:
悪い例: bad_function('田中', 25, 'アクティブ') = 田中25アクティブ
良い例: good_function('田中', 25, 'アクティブ') = 田中25アクティブ
結果は同じだが、良い例の方が理解しやすい
変数名だけで内容がわかるようにします。
型名を変数名にしない
データの型を変数名にするのは良くありません。
# よくある間違い:型名を変数名にするprint("型名を変数名にする間違い:")
# 悪い例(型名が変数名)# list = [1, 2, 3] # list は型名# string = "こんにちは" # string は型名# number = 42 # number は型名# boolean = True # boolean は型名
# 良い例(内容を表す名前)scores = [85, 92, 78]greeting_message = "こんにちは"student_age = 42is_registered = True
print("改善例:")print(f" scores = {scores} # 点数のリスト")print(f" greeting_message = {greeting_message} # 挨拶メッセージ")print(f" student_age = {student_age} # 学生の年齢")print(f" is_registered = {is_registered} # 登録済みかどうか")
# より具体的な例student_names = ["田中", "佐藤", "鈴木"]error_message = "ユーザーが見つかりません"total_count = 150has_permission = False
print(f"より具体的な例:")print(f" student_names = {student_names}")print(f" error_message = {error_message}")print(f" total_count = {total_count}")print(f" has_permission = {has_permission}")
# 実用例:商品管理システムdef manage_products(): """商品管理の例""" # 悪い例の変数名(コメントアウト) # list = ["りんご", "バナナ", "オレンジ"] # dict = {"りんご": 100, "バナナ": 80} # 良い例 product_names = ["りんご", "バナナ", "オレンジ"] product_prices = {"りんご": 100, "バナナ": 80, "オレンジ": 120} print(f"商品管理システム:") print(f" product_names = {product_names}") print(f" product_prices = {product_prices}") # 商品情報の表示 for product in product_names: price = product_prices.get(product, 0) print(f" {product}: {price}円")
manage_products()
何のデータかわかる名前にします。
実行結果:
型名を変数名にする間違い:
改善例:
scores = [85, 92, 78] # 点数のリスト
greeting_message = こんにちは # 挨拶メッセージ
student_age = 42 # 学生の年齢
is_registered = True # 登録済みかどうか
より具体的な例:
student_names = ['田中', '佐藤', '鈴木']
error_message = ユーザーが見つかりません
total_count = 150
has_permission = False
商品管理システム:
product_names = ['りんご', 'バナナ', 'オレンジ']
product_prices = {'りんご': 100, 'バナナ': 80, 'オレンジ': 120}
りんご: 100円
バナナ: 80円
オレンジ: 120円
型ではなく内容を表現することが大切です。
一貫性を保つ
同じプロジェクト内では命名ルールを統一します。
# 一貫性のある命名print("一貫性のある命名の重要性:")
# 悪い例:バラバラな命名# userName = "田中" # キャメルケース# user_age = 25 # スネークケース# UserEmail = "tanaka@example.com" # 大文字始まり# USERPHONE = "090-1234-5678" # 全部大文字
# 良い例:統一された命名user_name = "田中"user_age = 25user_email = "tanaka@example.com"user_phone = "090-1234-5678"
print("統一された命名(snake_case):")print(f" user_name = {user_name}")print(f" user_age = {user_age}")print(f" user_email = {user_email}")print(f" user_phone = {user_phone}")
# ID系の変数も統一user_id = 12345product_id = 67890order_id = 11111
print(f"ID系変数の統一:")print(f" user_id = {user_id}")print(f" product_id = {product_id}")print(f" order_id = {order_id}")
# 日時系の変数も統一created_at = "2024-01-01 10:00:00"updated_at = "2024-01-02 15:30:00"deleted_at = None
print(f"日時系変数の統一:")print(f" created_at = {created_at}")print(f" updated_at = {updated_at}")print(f" deleted_at = {deleted_at}")
# フラグ系の変数も統一is_active = Trueis_verified = Falseis_admin = True
print(f"フラグ系変数の統一:")print(f" is_active = {is_active}")print(f" is_verified = {is_verified}")print(f" is_admin = {is_admin}")
# 設定系の変数も統一MAX_FILE_SIZE = 1024 * 1024 # 1MBMAX_USER_COUNT = 1000MAX_RETRY_ATTEMPTS = 3
print(f"設定系変数の統一:")print(f" MAX_FILE_SIZE = {MAX_FILE_SIZE}")print(f" MAX_USER_COUNT = {MAX_USER_COUNT}")print(f" MAX_RETRY_ATTEMPTS = {MAX_RETRY_ATTEMPTS}")
統一感のあるコードが読みやすさを向上させます。
実行結果:
一貫性のある命名の重要性:
統一された命名(snake_case):
user_name = 田中
user_age = 25
user_email = tanaka@example.com
user_phone = 090-1234-5678
ID系変数の統一:
user_id = 12345
product_id = 67890
order_id = 11111
日時系変数の統一:
created_at = 2024-01-01 10:00:00
updated_at = 2024-01-02 15:30:00
deleted_at = None
フラグ系変数の統一:
is_active = True
is_verified = False
is_admin = True
設定系変数の統一:
MAX_FILE_SIZE = 1048576
MAX_USER_COUNT = 1000
MAX_RETRY_ATTEMPTS = 3
パターンが統一されているので理解しやすいコードになります。
まとめ: 良い変数名で読みやすいコードを
Python変数名の命名ルールの基本から実践的なテクニックまで詳しく解説しました。
良い変数名をつけることで、コードの可読性と保守性が大幅に向上します。
必須の基本ルール
これだけは絶対に守りましょう。
- 使える文字: 英字、数字、アンダースコアのみ
- 先頭文字: 数字で始められない
- 予約語: Python の特別な単語は使用禁止
- 大文字小文字: 区別されるので注意
PEP 8推奨スタイル
Pythonコミュニティの標準です。
- 変数名: snake_case(小文字でアンダースコア区切り)
- 定数: UPPER_SNAKE_CASE(大文字でアンダースコア区切り)
- 統一性: プロジェクト全体で一貫したスタイル
意味のある名前のコツ
読む人のことを考えた命名です。
- 自己説明的: 変数名だけで何かわかる
- 具体的: data、info、temp などの曖昧な名前を避ける
- 単位明示: 時間、距離、重量などは単位を含める
- 適切な長さ: 短すぎず長すぎないバランス
実践的なテクニック
場面に応じた適切なパターンです。
- 真偽値: is_、has_、can_ で始める
- カウンター: count、num_of、total_ を使う
- 対の概念: start/end、min/max、input/output
- 設定値: MAX_、DEFAULT_、_TIMEOUT など
避けるべき間違い
初心者がやりがちな問題です。
- 意味のない名前: data、info、temp、thing
- 型名の使用: list、string、number、boolean
- 命名の不統一: キャメルケースとスネークケースの混在
- 日本語の過度な使用: 国際化や互換性の問題
良い変数名は、未来の自分やチームメンバーへの贈り物です。
まずは基本的なsnake_caseから始めて、徐々に意味のある具体的な名前をつけられるようになりましょう!