【Python入門 #7】コードを整理整頓!何度でも使える部品「関数」を作ろう

ALL

こんにちは、Tech Samuraiです!
前回の記事「【Python入門 #6】たくさんのデータを整理しよう!リストと辞書の使い方をマスター」では、リストと辞書を使って、多くのデータを整理する方法を学びましたね。

これまでの冒険で、私たちのプログラムはどんどん長くなってきました。そして、よく見ると「あれ、この部分のコード、さっきも書いたな…」という場面が出てきたかもしれません。同じコードを何度もコピー&ペーストするのは、面倒なだけでなく、後で修正が必要になったときに全ての箇所を直さなければならず、バグの温床になります。

今回のテーマは、この問題を解決するためのプログラミングの基本原則「DRY (Don’t Repeat Yourself – 同じことを繰り返すな)」を実現する魔法、「関数(かんすう)」です。

関数とは、一連の処理を一つの「部品」としてまとめ、それに名前を付けたものです。一度部品を作ってしまえば、後はその名前を呼ぶだけで、いつでもどこでも同じ処理を呼び出すことができます。さあ、あなたのコードを整理整頓し、再利用可能な美しい部品へと昇華させましょう!


関数ってなんだろう? オリジナルの「道具」を作ろう

実は、私たちはすでに関数をたくさん使ってきました。print()len(), type(), input()など、これらは全てPythonが最初から用意してくれている「便利な道具(組み込み関数)」です。

今回学ぶのは、これらの道具をただ使うだけでなく、**自分だけのオリジナルの道具を作る**方法です。

例えるなら… 関数は「料理のレシピ」です。一度「カレーの作り方」というレシピを完成させてしまえば、後はいつでも「カレーを作って!」とお願いするだけで、同じ手順で美味しいカレーが作れますよね。具材(データ)を変えれば、チキンカレーや野菜カレーに応用することもできます。


関数の作り方と呼び出し方

Pythonで関数を作るには、def(define: 定義する の略)というキーワードを使います。

引数も戻り値もない、シンプルな関数

まずは、最もシンプルな「決まった挨拶をする」という関数を作ってみましょう。

# --- 関数の「定義」 ---
# "say_hello" という名前の関数(レシピ)を定義する
def say_hello():
    print("こんにちは、Tech Samuraiです!")
    print("Pythonの学習、楽しんでいますか?")

# --- 関数の「呼び出し」 ---
# 定義した関数(レシピ)を、名前を呼んで実行する
print("プログラムを開始します。")
say_hello()
print("プログラムを終了します。")

実行結果:

プログラムを開始します。
こんにちは、Tech Samuraiです!
Pythonの学習、楽しんでいますか?
プログラムを終了します。

このように、defで処理をまとめ、関数名()でその処理を呼び出すのが基本です。


関数に情報を渡す「引数」

先ほどの関数は、いつでも同じ挨拶しかできません。もし、「特定の名前の人」に挨拶したい場合はどうでしょう? そこで使うのが**引数(ひきすう)**です。これは、関数を呼び出すときに、外から情報を渡すためのものです。レシピでいう「具材」にあたります。

# (name) という引数を一つ受け取る関数を定義
def greet(name):
    print(f"こんにちは、{name}さん!")

# 関数を呼び出すときに、具体的な名前(引数)を渡す
greet("Ninja Python")
greet("Geek Sensei")

実行結果:

こんにちは、Ninja Pythonさん!
こんにちは、Geek Senseiさん!

関数から結果を受け取る「戻り値」

これまでの関数は、画面に何かを表示する(print)だけで、処理の結果を返してはくれませんでした。計算結果などを、関数の呼び出し元で再利用したい場合に使うのが**return(リターン)**です。これは、関数の「成果物」や「完成品」を返す命令です。

# 2つの数値を受け取り、その合計を「返す」関数
def add(a, b):
    total = a + b
    return total # total の中身を関数の結果として返す

# 関数を呼び出し、戻り値を変数 sum_result に代入
sum_result = add(5, 3)
print(f"5 + 3 の計算結果は {sum_result} です。")

# 戻り値を使って、さらに計算することもできる
another_result = add(10, sum_result)
print(f"10 + {sum_result} の計算結果は {another_result} です。")

実行結果:

5 + 3 の計算結果は 8 です。
10 + 8 の計算結果は 18 です。

returnを使うことで、関数は単なる処理の塊から、**新しいデータを生み出す部品**へと進化します。


実践!関数を使ってコードを整理しよう

長方形の面積を計算するプログラムを例に、関数のありがたみを体感してみましょう。

Before: 関数を使わない場合

# 長方形A
width1 = 10
height1 = 5
area1 = width1 * height1
print(f"長方形Aの面積: {area1}")

# 長方形B
width2 = 7
height2 = 3
area2 = width2 * height2
print(f"長方形Bの面積: {area2}")

面積を計算するロジックが2回登場し、無駄が多いですね。

After: 関数を使った場合

# 面積を計算する関数を先に定義しておく
def calculate_rectangle_area(width, height):
    return width * height

# 関数を呼び出すだけで、何度でも面積計算ができる
area1 = calculate_rectangle_area(10, 5)
print(f"長方形Aの面積: {area1}")

area2 = calculate_rectangle_area(7, 3)
print(f"長方形Bの面積: {area2}")

コードがスッキリし、「面積を計算する」という処理が一か所にまとまっているため、後から計算方法を変更したくなった場合も、関数の定義部分を1箇所修正するだけで済みます。


まとめ

今回は、プログラムを整理整頓し、再利用可能にするための超重要概念「関数」について探検しました。

  • 関数は、defを使って定義する、再利用可能な処理の「部品」であること。
  • 関数にデータを渡すための入り口が**引数**。
  • 関数から結果を受け取るための出口が**戻り値 (return)**。
  • 関数を使うことで、コードの重複がなくなり、見通しが良くなること。

変数、演算子、if文、ループ、データ構造、そして関数。これで、あなたはPythonプログラミングの基本的な部品を全て手に入れました。もはやあなたは学習者ではなく、創造者(プログラマー)です。

次回からは、これまでに作った「データ」と「関数(処理)」を、一つの大きな設計図の元にまとめ上げる**「オブジェクト指向プログラミング(OOP)」**という、新たなステージへの冒険が始まります。お楽しみに!

コメント

タイトルとURLをコピーしました