カテゴリ: Python 更新日: 2026/03/24

Pythonの関数を引数に渡す方法!高階関数の使い方を解説

Pythonの関数を引数に渡す方法!高階関数の使い方を解説
Pythonの関数を引数に渡す方法!高階関数の使い方を解説

先生と生徒の会話形式で理解しよう

生徒

「Pythonで関数を変数みたいに扱えるって聞いたんですけど、本当ですか?」

先生

「はい、本当です。Pythonでは関数もオブジェクトなので、変数に代入したり、他の関数に引数として渡すことができます。」

生徒

「関数を引数に渡すってどういう時に使うんですか?」

先生

「それは『高階関数』と呼ばれる使い方で、処理を柔軟に変えられる場面で便利なんです。今から具体的な例を見せますね。」

1. 高階関数とは?初心者向けにわかりやすく解説

1. 高階関数とは?初心者向けにわかりやすく解説
1. 高階関数とは?初心者向けにわかりやすく解説

高階関数(Higher-Order Function)とは、一言で言うと「関数をデータと同じように扱う関数」のことです。具体的には、以下のどちらか(あるいは両方)を満たす関数のことを指します。

  • 引数として他の関数を受け取る
  • 戻り値(実行結果)として関数を返す

「関数を引数に渡す」と聞くと難しく感じるかもしれませんが、料理に例えると簡単です。「加熱する」という共通の処理(高階関数)に対して、「焼く」「煮る」「蒸す」といった具体的な調理法(引数となる関数)を外から指定するようなイメージです。

プログラミング未経験の方でもイメージしやすいよう、まずは「計算方法を後から選べる」シンプルな仕組みを考えてみましょう。


# 1. 具体的な処理(材料をどう加工するか)を定義
def plus(a, b):
    return a + b

def multiply(a, b):
    return a * b

# 2. 高階関数(どんな計算でも受け入れる「計算機」)を定義
def calculator(func, x, y):
    # 引数 func に渡された関数を実行する
    return func(x, y)

# 3. 実行:同じ calculator を使いつつ、処理だけを切り替える
print(calculator(plus, 5, 3))      # 結果: 8 (足し算を渡した)
print(calculator(multiply, 5, 3))  # 結果: 15 (掛け算を渡した)

この例では、calculatorが「高階関数」にあたります。このように、処理の「枠組み」だけを作っておき、中身の「詳細なルール」を外から関数として流し込むことで、コードを何度も書き直す手間が省け、柔軟でスッキリとしたプログラムが書けるようになります。

2. Pythonで関数を引数に渡す基本の書き方

2. Pythonで関数を引数に渡す基本の書き方
2. Pythonで関数を引数に渡す基本の書き方

Pythonでは、関数を数値や文字列と同じように「オブジェクト」として扱えるのが大きな特徴です。そのため、ある関数を実行する際に、別の関数を「データ」として放り込むことができます。

まずは、プログラミング未経験の方でも直感的に理解できるよう、「受け取った関数を使ってユーザーを処理する」というシンプルなコードで流れを確認してみましょう。


# 1. 実行したい具体的な「処理」を関数として定義
def greet(name):
    return f"こんにちは、{name}さん!"

# 2. 関数を引数として受け取る「器」となる関数を定義
def process_user(func):
    # 引数 func には、後で渡される関数(greetなど)が入る
    # ここで func("太郎") と書くことで、greet("太郎") を実行しているのと同じ意味になる
    return func("太郎")

# 3. 実行:関数 process_user に、関数 greet を「丸ごと」渡す
# 注意:greet() と書かず、カッコを付けずに名前だけ渡すのがポイント!
result = process_user(greet)

print(result)

こんにちは、太郎さん!

このコードのポイントは、process_user(greet) と呼び出している部分です。関数名に () を付けずに渡すことで、「関数を実行した結果」ではなく「関数そのもの」をバトンタッチしています。

受け手側の process_user は、中で func という名前でその関数を受け取り、好きなタイミングで func("太郎") のように実行(呼び出し)ができるようになります。この仕組みを知っておくだけで、プログラムの柔軟性は一気に高まります。

3. 関数を複数渡して使い分ける

3. 関数を複数渡して使い分ける
3. 関数を複数渡して使い分ける

高階関数の強みは、処理を外部から差し替えられることです。


def greet_jp(name):
    return f"こんにちは、{name}さん"

def greet_en(name):
    return f"Hello, {name}!"

def process(func, name):
    return func(name)

print(process(greet_jp, "花子"))
print(process(greet_en, "Hanako"))

こんにちは、花子さん
Hello, Hanako!

同じprocess関数でも、渡す関数を変えるだけで処理内容を切り替えられます。

4. 無名関数(lambda)と組み合わせる

4. 無名関数(lambda)と組み合わせる
4. 無名関数(lambda)と組み合わせる

関数を定義するほどではない簡単な処理なら、lambda(無名関数)と組み合わせると便利です。


def execute(func, value):
    return func(value)

print(execute(lambda x: x ** 2, 5))
print(execute(lambda text: text.upper(), "python"))

25
PYTHON

このように、一時的な処理を簡潔に書けます。

5. 組み込みの高階関数

5. 組み込みの高階関数
5. 組み込みの高階関数

Pythonには最初から高階関数がいくつか用意されています。代表的なのはmap()filter()sorted()などです。


numbers = [1, 2, 3, 4, 5]

# mapで2倍に
doubled = list(map(lambda x: x * 2, numbers))
print(doubled)

# filterで偶数だけ
even = list(filter(lambda x: x % 2 == 0, numbers))
print(even)

# sortedでカスタムソート
sorted_list = sorted(numbers, key=lambda x: -x)
print(sorted_list)

[2, 4, 6, 8, 10]
[2, 4]
[5, 4, 3, 2, 1]

これらは関数を引数に取ることで、柔軟な処理が可能になります。

6. 関数を引数に渡すときの注意点

6. 関数を引数に渡すときの注意点
6. 関数を引数に渡すときの注意点
  • 関数名の後に()をつけると、その場で実行してしまうので注意
  • 処理の内容が複雑すぎる場合は、関数を定義してから渡す方が可読性が高い
  • lambdaは短い処理に限定して使うと見やすい

高階関数は、コードを柔軟かつ再利用性の高いものにするための重要なテクニックです。

まとめ

まとめ
まとめ

この記事では、Pythonにおける関数を引数として渡す方法や、高階関数の柔軟な使い方について深く学びました。関数を引数として扱うことで、処理の切り替えや再利用性を高め、より読みやすく保守しやすいコードを書くための基礎を身につけることができます。特に、あらゆる処理を外部から渡すという考え方は、条件分岐を減らし、シンプルで美しいコードへと導いてくれます。また、高階関数を用いることで、関数そのものを組み合わせて表現力の高いプログラムを記述できる点も重要です。Pythonの関数はオブジェクトであるため、変数に代入できるだけではなく、リストに入れたり辞書にまとめたり、そして引数に渡したりと自由度の高い扱いが可能です。

さらに、無名関数であるlambdaを活用することで、短い処理を簡潔に記述でき、mapやfilterなどの組み込み高階関数と合わせて使うことで、より効率的で直感的なデータ変換が行えます。Pythonの柔軟な文法を最大限に活かし、複数の関数を引数として受け取り切り替えるスタイルや、関数を戻り値として返すスタイルは、初心者にとっても理解しやすく、発展的なプログラミングの入口として適しています。

以下のようなサンプルコードでは、記事で学んだ内容をまとめつつ、関数を引数に渡す仕組みを実際に体験できます。特に、柔軟な処理の差し替えや、lambdaを使った簡潔な記述方法を強調することで、高階関数の活用イメージがより明確になります。

サンプルコードまとめ


def format_jp(name):
    return f"こんにちは、{name}さん"

def format_en(name):
    return f"Hello, {name}!"

def run_formatter(func, value):
    return func(value)

# lambdaとの組み合わせでより柔軟に
result_a = run_formatter(format_jp, "太郎")
result_b = run_formatter(format_en, "Hanako")
result_c = run_formatter(lambda x: f"★{x}★", "Python")

print(result_a)
print(result_b)
print(result_c)

こうしたように、さまざまな書き方を組み合わせることで、場面に応じた処理の作り分けが容易になり、関数を扱う力が飛躍的に向上します。高階関数はデータ処理、文字操作、フィルタリング、整形、応答生成など多くの領域で活用され、Pythonらしい表現力の高いプログラムを構築するための基盤となります。関数を渡すという概念を理解することで、プログラム構造をより抽象的に考える力が身につき、関数設計の視野も広がります。

先生と生徒の振り返り会話

生徒

「今日の内容を振り返ると、関数を渡す仕組みがすごく便利だと感じました。処理を切り替えたり組み合わせたりできるのが新鮮でした。」

先生

「とても良い視点ですね。関数の受け渡しは、応用的なプログラミングに欠かせない考え方です。特にデータ処理やイベント管理にも役立ちます。」

生徒

「lambdaも便利ですね。短い処理なら、わざわざ関数を定義しなくても書けるのがうれしいです。」

先生

「その通りです。ただし可読性も忘れずに、長くなる場合は通常の関数として定義する方が良いですね。さまざまな書き方を実践しながら理解を深めていきましょう。」

生徒

「はい!今日学んだ高階関数をいろいろ試してみます!」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
PHP
PHP の DateTime クラスの基本的な使い方を完全ガイド!初心者向け解説
New2
PHP
PHPでREST APIを作る方法を完全ガイド!初心者でもわかるAPI開発入門
New3
Python
Pythonでデータベースの接続プールを使う方法を徹底解説!初心者向けPythonデータベース接続プール入門
New4
Python
Pythonの例外チェーンを完全ガイド!初心者でもわかるfrom句を使ったエラーハンドリング
人気記事
No.1
Java&Spring記事人気No1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.2
Java&Spring記事人気No2
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.3
Java&Spring記事人気No3
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.4
Java&Spring記事人気No4
PHP
PHPのデバッグ方法を完全ガイド!初心者でもわかるvar_dump・print_r・error_log
No.5
Java&Spring記事人気No5
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.6
Java&Spring記事人気No6
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.7
Java&Spring記事人気No7
PHP
PHPのfor, while, do-whileループの使い方を完全ガイド!初心者でもわかる繰り返し処理
No.8
Java&Spring記事人気No8
Python
Pythonの書き方を基本から解説!はじめてのPythonプログラム