Python 入門コース / 第4章 関数(第25〜32回) / レッスン 32
【実践】関数に分けてリファクタリング
どこで区切るか
判断基準はシンプルです。コメントを書きたくなった場所、同じ処理が 2 回以上出てくる場所、「〜する」と一言で言える場所。この 3 つが関数の切れ目です。原則は「1 つの関数は 1 つの仕事だけ」。
before.py(第24回の処理を1本で書いた状態)
sales = [...]
for row in sales:
row["amount"] = row["unit_price"] * row["quantity"]
by_product = {}
for row in sales:
by_product[row["product"]] = by_product.get(row["product"], 0) + row["amount"]
ranking = sorted(by_product.items(), key=lambda i: i[1], reverse=True)
total = sum(by_product.values())
print(f"{'順位':<4}{'商品':<12}{'売上':>12}")
for i, (name, amount) in enumerate(ranking, 1):
print(f"{i:<4}{name:<12}{amount:>11,}円")
関数に切り出す
関数名は動詞から始めると役割がはっきりします(calc_amounts / aggregate_by / print_table)。切り出したあとも出力が前と同じかを必ず確かめます。
editor.py
main() と if __name__ == "__main__"
処理の入口を main() にまとめ、最後の 2 行で呼び出します。この if は「このファイルを直接実行したときだけ動かす」という意味です。他のファイルから import したときに main() が勝手に走るのを防ぎます(第 38 回で詳しく扱います)。
リファクタリングは動きを変えずに構造だけ整える作業です。1 つ切り出すたびに実行し、出力が変わっていないことを確かめながら進めてください。
✅ 理解度チェック
if __name__ == "__main__": の意味は?