効率的なプログラムへの第一歩:Pythonの「関数」をマスターしよう
![]()
【Yuki】
ひろき君、こんにちは。今日はPythonの大切な要素である「関数(かんすう)」について、一緒に学んでいけたらなって思います。
外はすっかり冷え込んできて、静かな冬の空気になってきましたね。わたし、こういう静かな季節は、頭が熱くなりすぎなくて、プログラミングに集中できるから好きなんです……。
ひろき君は、プログラムを書いていて「同じような処理を何度も書いているな」って感じたことはありませんか?
![]()
【Hiroki】
Yukiさん、こんにちは!はい、まさにその通りです。
以前教えてもらった計算のコードとか、似たような内容を何度もコピーして貼り付けていることがあって、少し非効率だな……って思っていたところでした。
それを解決するのが「関数」なんですか?
![]()
【Yuki】
ええ、その通りです。よく気づきましたね。
関数というのは、一言で言うと「複数の処理を一つにまとめた、再利用可能な道具」のようなものです。
わたし、誰かの役に立つために開発された小さなツールの話を聞くのが、少しだけ好きなんです。なんだか、そのツールが誰かの体の一部になれたような気がして……。
プログラムにおける関数も、まさにそんな「小さな助っ人」のような存在だと思います。
1. 「関数」ってなんだろう? ― 便利な魔法の箱
![]()
【Yuki】
関数は、よく「魔法の箱」に例えられます。
箱の中に何か(データ)を入れると、箱の中で決まった処理が行われて、結果が出てくる……というイメージですね。
Pythonで関数を使うメリットは、主に3つあると思います。
- コードの再利用ができる: 一度作れば、何度でも呼び出して使えます。
- コードが見やすくなる: 長いプログラムを意味のある塊に分けることで、読みやすくなります。
- 修正が楽になる: 処理を変えたいとき、一箇所を直すだけで済みます。
![]()
【Hiroki】
なるほど、「道具箱」を自分で作るような感じですね。
具体的に、どうやってその箱を作ればいいんでしょうか?
2. 関数の作り方 ― defからはじまる定義
![]()
【Yuki】
関数を作ることを、プログラミング用語で「定義(ていぎ)する」と言います。
Pythonで関数を定義するには、defというキーワードを使います。
基本的な書き方は、こんな感じでしょうか……。
def 関数名():
# ここに実行したい処理を書く
print("こんにちは、関数です。")
# 関数を呼び出す(実行する)
関数名()
![]()
【Yuki】
ここで大切なのは、defの行の最後にコロン(:)を忘れないことと、その次の行からはスペース4つ分下げて(インデントして)書くことです。
わたし、Vimというエディタを愛用しているのですが、インデントが綺麗に揃っていないと、なんだか夜も眠れないくらい気になってしまって……。Pythonではこのインデントがプログラムの構造を決めるので、とても重要なんです。
![]()
【Hiroki】
defのあとに名前をつけて、その下に処理を書くんですね。
関数の名前は、どんなものでもいいんですか?
![]()
【Yuki】
基本的には自由ですが、「何をするための関数か」がわかりやすい名前をつけるのがいいと思います。
例えば、挨拶をする関数なら say_hello() のように、小文字の英単語をアンダースコア(_)でつなぐ「スネークケース」という書き方が一般的かもしれません。
3. 引数(ひきすう)を使って情報を渡す
![]()
【Yuki】
関数はただ実行するだけでなく、外部から情報を受け取って、それに応じた動きをさせることもできます。
この「受け取る情報」のことを、「引数(ひきすう)」と呼びます。
![]()
【Hiroki】
引数……。数学の授業でも聞いたことがあるような言葉ですね。
![]()
【Yuki】
そうですね、少し似ているかもしれません。
例えば、名前を引数として受け取って、その人に向けた挨拶を表示する関数を作ってみましょうか。
def greet(name):
print(f"こんにちは、{name}さん!")
# 引数に「ひろき」という文字列を渡して呼び出す
greet("ひろき")
greet("Yuki")
![]()
【Hiroki】
おぉ、渡す文字によって表示が変わりました!
これなら、名前の部分だけ変えて使い回せますね。
![]()
【Yuki】
ええ。引数は複数持たせることもできるんですよ。
例えば、2つの数字を受け取って足し算の計算結果を表示する、といったことも可能です。
def add_numbers(a, b):
result = a + b
print(f"{a} + {b} の答えは {result} です。")
add_numbers(10, 5)
4. 戻り値(もどりち)で結果を受け取る
![]()
【Hiroki】
Yukiさん、質問です。
今の例だと関数の中で print して終わりですが、計算した結果を、関数の外でさらに使いたい時はどうすればいいんでしょうか?
![]()
【Yuki】
いい質問ですね。そのためにあるのが「戻り値(もどりち)」です。
return というキーワードを使うと、関数の処理結果を呼び出し元に「返す」ことができます。
これを、よく「値を戻す」と言ったりします。
def calculate_area(radius):
# 円の面積を計算する(半径 × 半径 × 3.14)
area = radius * radius * 3.14
return area
# 関数の結果を変数に代入する
my_area = calculate_area(5)
print(f"計算された面積は {my_area} です。")
![]()
【Yuki】
このように return を使うと、関数という「箱」から、加工されたデータが外に飛び出してくるようなイメージになります。
この戻ってきた値を使って、さらに別の計算をしたり、画面に表示したりすることができるんです……。
ひろき君、ここまでの流れは大丈夫そうでしょうか?
![]()
【Hiroki】
はい、わかってきました!
def で関数を定義して、引数 で材料を渡して、return で完成品を受け取る……。
なんだか、工場みたいで面白いですね。
5. 関数の「スコープ」 ― 変数が使える範囲
![]()
【Yuki】
工場、素敵な例えですね。
でも、一つだけ注意しなければいけないルールがあるんです。
それが、「スコープ(変数の有効範囲)」というものです。
![]()
【Hiroki】
スコープ? 難しそうな言葉が出てきましたね。
![]()
【Yuki】
そんなに怖がらなくても大丈夫ですよ。
簡単に言うと、「関数の中で作った変数は、関数の外では使えない」というルールです。
これを確認するために、ちょっと意地悪なコードを書いてみますね。
def my_secret():
secret_message = "実はパフェを食べてみたいんです..."
print("関数の中:", secret_message)
my_secret()
# ここでエラーになります
# print("関数の外:", secret_message)
![]()
【Hiroki】
あ、エラーが出ました。
NameError: name 'secret_message' is not defined って書いてあります。
関数の中で定義した secret_message は、外からは見えないんですね。
![]()
【Yuki】
そうなんです。これをローカル変数と呼びます。
逆に、関数の外で定義した変数は「グローバル変数」と言って、基本的にはどこからでも参照できます。
でも、関数ごとに自分の「部屋」を持っているようなものだと思ってください。
わたしも、自分のパーソナルな領域を大切にしたいタイプなので、変数の気持ちもなんとなくわかる気がします……。
6. 引数のデフォルト値と、読みやすいコードの書き方
![]()
【Yuki】
最後に、少しだけ実践的なテクニックをお伝えしますね。
引数には、あらかじめ「デフォルト値(初期値)」を設定しておくことができるんです。
def welcome(name="ゲスト"):
print(f"ようこそ、{name}さん。")
# 引数を渡さずに呼び出す
welcome()
# 引数を渡して呼び出す
welcome("ひろき")
![]()
【Hiroki】
引数を入れなかったときは「ゲスト」になって、入れるとその名前になるんですね。
これなら、引数を忘れちゃったときも安心ですね。
![]()
【Yuki】
そうですね。それに、関数の役割をわかりやすくするために、「型ヒント」というものを使ったり、「docstring(ドキュメンテーション文字列)」で説明を書いたりすることもあります。
def multiply(x: int, y: int) -> int:
"""
2つの数値を掛け算して結果を返す関数です。
"""
return x * y
![]()
【Yuki】
x: int というのは「xは整数(integer)ですよ」というヒントです。
こうして丁寧に書いておくと、後で自分や他の人がプログラムを読んだときに、とっても助かるんです。
ウェブデザインでも、フォントの指定が丁寧だと「あぁ、このサイトは心がこもっているな」って感じて嬉しくなるのですが、コードも同じだと思うんです……。
![]()
【Hiroki】
確かに、これなら何をする関数か一目でわかりますね。
Yukiさん、ありがとうございます。関数を使うことで、自分のプログラムがぐっと本格的になりそうな気がしてきました!
![]()
【Yuki】
そう言ってもらえると、わたしも嬉しいです。
誰かの役に立つために生まれた「小さなツール」としての関数を、ぜひひろき君の手でたくさん作ってあげてくださいね。
何かわからないことがあったら、またいつでも聞いてください……。
夜はまだ長いですし、ゆっくり学んでいきましょう。
参考資料 - Python 公式ドキュメント: 4.8. 関数の定義 - Python 公式ドキュメント: 用語集(引数・戻り値)
「関数」のサンプルコードを見る
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。


