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__": の意味は?