こんにちは、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)」**という、新たなステージへの冒険が始まります。お楽しみに!
コメント