mei_13のPython講座 ロゴ

【解説】効率的なプログラムへの第一歩:Pythonの「関数」をマスターしよう




効率的なプログラムへの第一歩:Pythonの「関数」をマスターしよう


Yukiのアイコン
【Yuki】 ひろき君、こんにちは。今日はPythonの大切な要素である「関数(かんすう)」について、一緒に学んでいけたらなって思います。 外はすっかり冷え込んできて、静かな冬の空気になってきましたね。わたし、こういう静かな季節は、頭が熱くなりすぎなくて、プログラミングに集中できるから好きなんです……。 ひろき君は、プログラムを書いていて「同じような処理を何度も書いているな」って感じたことはありませんか?


Hirokiのアイコン
【Hiroki】 Yukiさん、こんにちは!はい、まさにその通りです。 以前教えてもらった計算のコードとか、似たような内容を何度もコピーして貼り付けていることがあって、少し非効率だな……って思っていたところでした。 それを解決するのが「関数」なんですか?


Yukiのアイコン
【Yuki】 ええ、その通りです。よく気づきましたね。 関数というのは、一言で言うと「複数の処理を一つにまとめた、再利用可能な道具」のようなものです。 わたし、誰かの役に立つために開発された小さなツールの話を聞くのが、少しだけ好きなんです。なんだか、そのツールが誰かの体の一部になれたような気がして……。 プログラムにおける関数も、まさにそんな「小さな助っ人」のような存在だと思います。

1. 「関数」ってなんだろう? ― 便利な魔法の箱


Yukiのアイコン
【Yuki】 関数は、よく「魔法の箱」に例えられます。 箱の中に何か(データ)を入れると、箱の中で決まった処理が行われて、結果が出てくる……というイメージですね。 Pythonで関数を使うメリットは、主に3つあると思います。

  1. コードの再利用ができる: 一度作れば、何度でも呼び出して使えます。
  2. コードが見やすくなる: 長いプログラムを意味のある塊に分けることで、読みやすくなります。
  3. 修正が楽になる: 処理を変えたいとき、一箇所を直すだけで済みます。


Hirokiのアイコン
【Hiroki】 なるほど、「道具箱」を自分で作るような感じですね。 具体的に、どうやってその箱を作ればいいんでしょうか?

2. 関数の作り方 ― defからはじまる定義


Yukiのアイコン
【Yuki】 関数を作ることを、プログラミング用語で「定義(ていぎ)する」と言います。 Pythonで関数を定義するには、defというキーワードを使います。 基本的な書き方は、こんな感じでしょうか……。

def 関数名():
    # ここに実行したい処理を書く
    print("こんにちは、関数です。")

# 関数を呼び出す(実行する)
関数名()


Yukiのアイコン
【Yuki】 ここで大切なのは、defの行の最後にコロン(:を忘れないことと、その次の行からはスペース4つ分下げて(インデントして)書くことです。 わたし、Vimというエディタを愛用しているのですが、インデントが綺麗に揃っていないと、なんだか夜も眠れないくらい気になってしまって……。Pythonではこのインデントがプログラムの構造を決めるので、とても重要なんです。


Hirokiのアイコン
【Hiroki】 defのあとに名前をつけて、その下に処理を書くんですね。 関数の名前は、どんなものでもいいんですか?


Yukiのアイコン
【Yuki】 基本的には自由ですが、「何をするための関数か」がわかりやすい名前をつけるのがいいと思います。 例えば、挨拶をする関数なら say_hello() のように、小文字の英単語をアンダースコア(_)でつなぐ「スネークケース」という書き方が一般的かもしれません。

3. 引数(ひきすう)を使って情報を渡す


Yukiのアイコン
【Yuki】 関数はただ実行するだけでなく、外部から情報を受け取って、それに応じた動きをさせることもできます。 この「受け取る情報」のことを、「引数(ひきすう)」と呼びます。


Hirokiのアイコン
【Hiroki】 引数……。数学の授業でも聞いたことがあるような言葉ですね。


Yukiのアイコン
【Yuki】 そうですね、少し似ているかもしれません。 例えば、名前を引数として受け取って、その人に向けた挨拶を表示する関数を作ってみましょうか。

def greet(name):
    print(f"こんにちは、{name}さん!")

# 引数に「ひろき」という文字列を渡して呼び出す
greet("ひろき")
greet("Yuki")


Hirokiのアイコン
【Hiroki】 おぉ、渡す文字によって表示が変わりました! これなら、名前の部分だけ変えて使い回せますね。


Yukiのアイコン
【Yuki】 ええ。引数は複数持たせることもできるんですよ。 例えば、2つの数字を受け取って足し算の計算結果を表示する、といったことも可能です。

def add_numbers(a, b):
    result = a + b
    print(f"{a} + {b} の答えは {result} です。")

add_numbers(10, 5)

4. 戻り値(もどりち)で結果を受け取る


Hirokiのアイコン
【Hiroki】 Yukiさん、質問です。 今の例だと関数の中で print して終わりですが、計算した結果を、関数の外でさらに使いたい時はどうすればいいんでしょうか?


Yukiのアイコン
【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のアイコン
【Yuki】 このように return を使うと、関数という「箱」から、加工されたデータが外に飛び出してくるようなイメージになります。 この戻ってきた値を使って、さらに別の計算をしたり、画面に表示したりすることができるんです……。 ひろき君、ここまでの流れは大丈夫そうでしょうか?


Hirokiのアイコン
【Hiroki】 はい、わかってきました! def で関数を定義して、引数 で材料を渡して、return で完成品を受け取る……。 なんだか、工場みたいで面白いですね。

5. 関数の「スコープ」 ― 変数が使える範囲


Yukiのアイコン
【Yuki】 工場、素敵な例えですね。 でも、一つだけ注意しなければいけないルールがあるんです。 それが、「スコープ(変数の有効範囲)」というものです。


Hirokiのアイコン
【Hiroki】 スコープ? 難しそうな言葉が出てきましたね。


Yukiのアイコン
【Yuki】 そんなに怖がらなくても大丈夫ですよ。 簡単に言うと、「関数の中で作った変数は、関数の外では使えない」というルールです。 これを確認するために、ちょっと意地悪なコードを書いてみますね。

def my_secret():
    secret_message = "実はパフェを食べてみたいんです..."
    print("関数の中:", secret_message)

my_secret()

# ここでエラーになります
# print("関数の外:", secret_message)


Hirokiのアイコン
【Hiroki】 あ、エラーが出ました。 NameError: name 'secret_message' is not defined って書いてあります。 関数の中で定義した secret_message は、外からは見えないんですね。


Yukiのアイコン
【Yuki】 そうなんです。これをローカル変数と呼びます。 逆に、関数の外で定義した変数は「グローバル変数」と言って、基本的にはどこからでも参照できます。 でも、関数ごとに自分の「部屋」を持っているようなものだと思ってください。 わたしも、自分のパーソナルな領域を大切にしたいタイプなので、変数の気持ちもなんとなくわかる気がします……。

6. 引数のデフォルト値と、読みやすいコードの書き方


Yukiのアイコン
【Yuki】 最後に、少しだけ実践的なテクニックをお伝えしますね。 引数には、あらかじめ「デフォルト値(初期値)」を設定しておくことができるんです。

def welcome(name="ゲスト"):
    print(f"ようこそ、{name}さん。")

# 引数を渡さずに呼び出す
welcome()

# 引数を渡して呼び出す
welcome("ひろき")


Hirokiのアイコン
【Hiroki】 引数を入れなかったときは「ゲスト」になって、入れるとその名前になるんですね。 これなら、引数を忘れちゃったときも安心ですね。


Yukiのアイコン
【Yuki】 そうですね。それに、関数の役割をわかりやすくするために、「型ヒント」というものを使ったり、「docstring(ドキュメンテーション文字列)」で説明を書いたりすることもあります。

def multiply(x: int, y: int) -> int:
    """
    2つの数値を掛け算して結果を返す関数です。
    """
    return x * y


Yukiのアイコン
【Yuki】 x: int というのは「xは整数(integer)ですよ」というヒントです。 こうして丁寧に書いておくと、後で自分や他の人がプログラムを読んだときに、とっても助かるんです。 ウェブデザインでも、フォントの指定が丁寧だと「あぁ、このサイトは心がこもっているな」って感じて嬉しくなるのですが、コードも同じだと思うんです……。


Hirokiのアイコン
【Hiroki】 確かに、これなら何をする関数か一目でわかりますね。 Yukiさん、ありがとうございます。関数を使うことで、自分のプログラムがぐっと本格的になりそうな気がしてきました!


Yukiのアイコン
【Yuki】 そう言ってもらえると、わたしも嬉しいです。 誰かの役に立つために生まれた「小さなツール」としての関数を、ぜひひろき君の手でたくさん作ってあげてくださいね。 何かわからないことがあったら、またいつでも聞いてください……。 夜はまだ長いですし、ゆっくり学んでいきましょう。


参考資料 - Python 公式ドキュメント: 4.8. 関数の定義 - Python 公式ドキュメント: 用語集(引数・戻り値)



「関数」のサンプルコードを見る

< for文
コラム一覧に戻る
配列 >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
● 高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!



AIアシスタント Yuki