🐍 同じ処理を何度も書く日々から卒業!関数defの世界へ
Pythonの学習を始めて、変数や条件分岐、繰り返し処理に慣れてきた頃に立ちはだかるのが「関数(def)」の壁です。ちょっと難しく感じるかもしれませんが、ここを越えるとコードが驚くほどスッキリし、「あ、自分プログラマっぽいことしてる!」という実感が一気に湧いてきます✨
関数を使いこなせるようになると、似たような処理を何度も書かずに済み、修正や機能追加もぐっとラクに。今日からあなたのスクリプトが、見違えるように読みやすく・再利用しやすくなりますよ🚀
📝 そもそも関数って何のためにあるの?
関数とは、ひとことで言うと「処理を一つにまとめて定義しておく仕組み」です。なぜそれが必要なのか、具体例で考えてみましょう。
たとえば「ある生徒の前期5教科の平均点と、後期5教科の平均点を表示するプログラム」を作るとします。関数を使わずに書くと、こうなります。
- 📘 前期の点数辞書
first_scoresから各教科を取り出し、合計して5で割る - 📕 後期の点数辞書
second_scoresから各教科を取り出し、合計して5で割る
処理が長くなるうえに、同じような計算を2回書いている。教科数が増えたら? 学期が増えたら? そのたびに似たコードが量産されていく…。
そこで登場するのが関数です。「5教科の点数を合計して5で割って返す」処理を関数として一度だけ定義しておけば、あとはaverage(first_scores)とaverage(second_scores)と呼び出すだけ。コードが短く・読みやすく・直しやすくなります🎯
✏️ 関数の書き方:基本のテンプレート
Pythonで関数を定義するときは、defというキーワードを使います。書き方の型はとてもシンプル。
def 関数名(引数):
処理
return 戻り値
ここでよく出てくる2つの言葉を整理しておきましょう。
- 🔸 引数(ひきすう):関数に渡す値。さっきの例なら「点数の辞書」。
- 🔸 戻り値(もどりち):関数が返してくる値。さっきの例なら「平均点」。
引数や戻り値が不要なら、その部分は書かなくてOK。逆に、両方とも複数設定することも可能です。定義した関数は関数名(引数)の形で呼び出して使います。
🧪 4つのパターンで関数の動きを確認しよう
① 引数なし・戻り値なし:いちばんシンプルな関数
def print_banana():
print("banana")
print_banana()
# → banana
defのあとに関数名と()、コロンを書いて改行、そこから関数の中身を書いていきます。引数がなければ括弧の中は空でOK。呼び出すと「banana」と表示されるだけのシンプルな関数です🍌
② 引数あり・戻り値なし:渡した値で挙動が変わる関数
def print_text(text):
print(text)
print_text("apple") # → apple
print_text("orange") # → orange
関数定義の(text)が引数。呼び出すときに渡した値がtextに入り、その中身をprintで表示します。同じ関数なのに、渡す値で結果が変わる──これが関数の柔軟さです🍎🍊
③ 引数あり・戻り値あり:値を加工して返す関数
def question_text(text):
return text + "?"
result = question_text("apple")
print(result)
# → apple?
returnで値を返す関数。呼び出した側ではresult = question_text("apple")のように変数に受け取るのがポイントです。受け取った戻り値はそのままprintに渡したり、別の処理に使ったりできます💡
④ 複数の引数・複数の戻り値:合わせ技
def qe_text(text1, text2):
return text1 + "?", text2 + "!"
r1, r2 = qe_text("apple", "banana")
print(r1) # → apple?
print(r2) # → banana!
引数を,で並べれば複数渡せますし、returnも,で区切れば複数の値を返せます。受け取る側もr1, r2 = ...のように書けば、それぞれの変数にスッと収まります🎁
🌱 ここから先のステップ:関数の深い世界へ
関数には今回紹介した基本のほかにも、こんな発展トピックが待っています。
- 🏷️ タイプアノテーション:引数や戻り値の型をヒントとして書ける
- ⚙️ デフォルト引数:引数を省略したときに使う初期値を設定できる
- 🔢 可変長引数(*args / **kwargs):引数の数を自由に変えられる
- 🪄 無名関数(lambda):その場限りの小さな関数を1行で書ける
まずは今回の4パターンをしっかり手に馴染ませてから、上のトピックに進むと、迷子になりません🗺️
📚 関数の理解をさらに深める学習パートナー
動画と合わせて手元に1冊あると、復習・応用がぐっとスムーズに。レベル別に厳選した書籍を紹介します📖
🌱 はじめての関数学習に:会話形式でやさしく
「defってそもそも何…?」というレベルから、対話形式でゆっくり学びたい方にぴったり。関数の必要性から呼び出しまで、図解中心で腹落ちしやすいです。
📘 定番の入門書で体系的に:スッキリ学び直し
変数・条件分岐・繰り返し・関数までを一冊で網羅。引数・戻り値・スコープといった関連トピックも地続きで理解でき、つまずきが減ります。
🧑💻 独学で着実に:プログラマー思考も身につく
言語の基礎だけでなく「プログラマーとしての考え方」までカバー。関数の設計を「どう切り出すか」まで踏み込んで学べる一冊です。
🚀 実務レベルへステップアップ:Python実践入門
関数の引数バリエーション、デフォルト引数、可変長引数、型ヒントなど、「Pythonらしい関数」を書く力が身につきます。独学からの卒業に最適📈
✨ コードの質を磨きたい方へ:Effective Python
関数設計の落とし穴と、保守しやすい書き方が項目別にまとまった名著。中級者を目指すなら、関数の章だけでも一読の価値ありです。
❓ よくある質問(FAQ)
🤔 returnは必ず書かないとダメ?
いいえ、不要なら省略OKです。何も返さない関数は内部的にNoneを返します。逆に、関数の途中でreturnを実行するとそこで関数は終了するので、早期リターンのテクニックとしても使えます。
🧩 引数の名前は呼び出し側と同じにしないとダメ?
同じにする必要はありません。関数定義側の引数名は、関数の中だけで通用するローカルな名前です。呼び出し側はあくまで「値」を渡しているだけなので、別の変数名から渡しても問題ありません。
📦 複数の戻り値って、内部的にはどうなってるの?
実はPythonではreturn a, bと書くと、自動的にタプル(a, b)として1つの値が返されている状態です。受け取り側でx, y = func()のように書くと、タプルが自動的に展開(アンパック)されます。
♻️ 関数はどんなときに分割すればいい?
判断の目安は「同じ処理を2回以上書きそうになったとき」と「1つの処理に名前を付けられそうなとき」。短くても、名前を付けると意図が明確になるので積極的に切り出すのがおすすめです🔧
💬 引数や戻り値の「型」って指定できるの?
はい、タイプアノテーションを使えばdef func(x: int) -> str:のように書けます。動作には影響しませんが、エディタの補完や静的解析が効くようになり、バグも減らせて一石二鳥です。
🎯 まとめ:関数defで、あなたのPythonは一段階レベルアップする
関数は、最初は少し難しく感じる単元ですが、defの書き方・引数・戻り値という3つのパーツが理解できれば、もう怖くありません。「引数なし・戻り値なし」から始めて「複数引数・複数戻り値」まで、4パターンを順番に手を動かして書いてみるのが上達への近道です✋
関数を味方につけた瞬間、あなたのコードは「動くだけのコード」から「読みやすく、再利用できるコード」へと進化します。今日から早速、似た処理を見つけたら関数化してみましょう。気づいたとき、あなたは確実に一歩、プログラマーらしくなっています🌟


















































コメント