🐍 Pythonの哲学 ― The Zen of Python を実例で理解する
🧭 はじめに
Pythonには「公式に明文化された哲学」が存在します。それが The Zen of Python(PEP 20)です。 これは単なる格言集ではなく、Pythonらしいコードとは何か、なぜその書き方が推奨されるのかを判断するための“設計思想の基準”として機能します。
本記事では、Zen of Python の主要な考え方を取り上げ、良い具体例 / 悪い具体例を対比しながら解説します。 「なんとなくPythonっぽい」から一段踏み込み、なぜそれが良いのか/悪いのかを説明できる状態を目指します。
🧘 Zen of Python とは何か
Python REPL で次を実行すると表示されます。
>>> import this
表示されるのは以下のような短文です(一部抜粋)。
- Beautiful is better than ugly.
- Explicit is better than implicit.
- Simple is better than complex.
- Readability counts.
- There should be one—and preferably only one—obvious way to do it.
これらは個別のルールではなく、衝突したときの優先順位を示す指針と考えると理解しやすいです。
✨ Beautiful is better than ugly(醜いより美しい方がよい)
良い例:構造が一目でわかる
total = sum(price * quantity for price, quantity in items)
- 処理の意図が1行で明確
- 一時変数やノイズがない
Pythonでは処理の意味が視覚的に把握できること自体が「美しさ」と見なされる。
悪い例:機械的に動くが読みづらい
total = 0
for i in range(len(items)):
total = total + items[i][0] * items[i][1]
- C的な発想が残っている
- Pythonの表現力を活かしていない
「動く」ことと「美しい」ことは別。Pythonでは後者が優先される。
🔍 Explicit is better than implicit(暗黙より明示)
良い例:意図がはっきりしている
def load_config(path: str) -> dict:
...
- 型ヒントにより期待する入出力が明確
- 利用側が迷わない
悪い例:知っている人しか分からない
def load(p):
...
pが何か分からない- 戻り値の型も不明
Pythonは動的型付けだが、型を書かないことを推奨しているわけではない。
🧩 Simple is better than complex(単純は複雑に勝る)
良い例:素直な分岐
if status == 'ok':
handle_ok()
else:
handle_error()
悪い例:賢く見せたいコード
handle_ok() if status == 'ok' else handle_error()
- 一見短いが、処理が増えると破綻する
- デバッグしづらい
Pythonでは短いこと=良いことではない。
📖 Readability counts(可読性は重要)
良い例:名前が説明になっている
def is_valid_email(address: str) -> bool:
...
悪い例:意味を推測させる
def f(x):
...
Pythonではコメントよりも名前が重視される。
🛤 There should be one obvious way to do it
(やり方は一つであるべき)
良い例:Pythonic な書き方
with open('data.txt') as f:
data = f.read()
悪い例:管理を自分でやる
f = open('data.txt')
try:
data = f.read()
finally:
f.close()
後者は間違いではないが、前者が「明白な一つの方法」として提供されている。
⏳ Now is better than never(今やれ、でも焦るな)
良い例:まず書いて、後で洗練
def calculate_total(items):
return sum(items)
悪い例:最初から過剰設計
class ItemCollectionManagerFactoryBuilder:
...
Python文化では完璧な設計より、動く明瞭なコードが評価される。
🚫 Special cases aren't special enough to break the rules
(例外はルールを壊すほど特別ではない)
悪い例:特例だらけの分岐
if user.is_admin:
...
elif user.id == 1:
...
elif user.name == 'root':
...
- ルールがコードに埋もれる
- 将来の変更で崩壊する
「特別扱い」を積み上げると設計の一貫性が崩壊する。
🧠 Zen of Python をどう使うべきか
Zen of Python は「守らなければならない規則」ではありません。 判断に迷ったときの物差しです。
- 短く書くべきか?
- 抽象化しすぎていないか?
- 他人(未来の自分)が読めるか?
これらを自問するとき、Zen は強力な補助線になります。
Pythonic とは「Pythonらしい構文」ではなく、Pythonの哲学に沿った判断をしている状態。
🔚 まとめ
- Zen of Python は設計思想の優先順位表
- 良いコードは「賢い」より「明瞭」
- Pythonでは 読みやすさ・意図の明示・単純さ が最優先される
Zen を暗記する必要はありません。 ただし、違和感を覚えたときに立ち返れる場所として知っておく価値は非常に高い哲学です。