【Python】関数を柔軟に受け取るoperator_func:実践—型ヒントCallableとlambda式の基本:2025.7.26

operator_func、Callableとlambdaの実用例まとめ

特徴(ポイント)

  • operator_func には「どんな計算をするか(処理内容)」を指定
  • 関数側は引数の数と型だけ宣言し、実際の計算方法は呼び出し時にoperator_funcで自由に指定
  • 例:入力:整数2つ、出力:整数1つ(operator_func: Callable[[int, int], int]
  • 型ヒント(Callable)とlambda式を組み合わせて、直感的かつ安全に記述

Pythonの魅力のひとつは、**「関数を引数として渡せる」**ことです。
これにより、計算処理を柔軟に切り替えたり、汎用的なコードを書くことができます。

本記事では、**型ヒント(Callable)無名関数(lambda)**を使った実用例を紹介します。


1. 1変数の関数を渡すパターン

引数が1つの場合は、こう書きます。

pythonCopyEditfrom typing import Callable

def bar(operator_func: Callable[[int], int]) -> None:
print(operator_func(5)) # 例: 5×5=25

bar(lambda x: x * x) # 2乗(5→25)
bar(lambda x: abs(x)) # 絶対値(-3→3)
bar(lambda x: x + 100) # 100加算(7→107)
  • Callable[[int], int] …「int型の引数1つ → int型の戻り値」の関数を受け取る
  • lambda x: ... で好きな処理をその場で渡せる

その他1変数例

pythonCopyEdit# 偶数ならそのまま、奇数なら+1
bar(lambda x: x if x % 2 == 0 else x + 1)

# 3の倍数か判定(1 or 0を返す)
bar(lambda x: 1 if x % 3 == 0 else 0)

2. 2変数の関数を渡すパターン

次は2つの整数を受け取る関数を引数にする例です。

pythonCopyEditdef foo(operator_func: Callable[[int, int], int]) -> None:
    # operator_funcは「int, intを受け取りintを返す」関数
    print(operator_func(3, 4))  # 例: 3×4=12

foo(lambda x, y: x * y)   # 出力: 12
  • Callable[[int, int], int] …「int型の引数2つ → int型の戻り値」の関数を受け取る
  • lambda x, y: ... で好きな計算をその場で渡せる

さまざまな2変数の例

pythonCopyEdit# 加算
foo(lambda x, y: x + y)     # 3+4=7

# 差分
foo(lambda x, y: x - y)     # 3-4=-1

# 最大値
foo(lambda x, y: max(x, y)) # 3と4の大きい方→4

# 最小値
foo(lambda x, y: min(x, y)) # 小さい方→3

# べき乗
foo(lambda x, y: x ** y)    # 3の4乗→81

# 整数除算
foo(lambda x, y: x // y)    # 3//4→0

3. 関数を自作して渡すパターン

lambda式だけでなく、普通にdefで定義した関数も渡せます。

pythonCopyEditdef multiply(x: int, y: int) -> int:
    return x * y

foo(multiply)   # 3*4=12

4. 応用:型ヒントで柔軟性アップ

  • 戻り値をfloatにしたいなら Callable[[int, int], float] などもOK。
  • 引数がない関数なら Callable[[], int] もOK。

まとめ

  • Callableを使うと「どんな型の関数を渡せるか」を明示できて、型安全!
  • lambdaと組み合わせれば、その場で好きな処理が渡せて便利!
  • 1変数でも2変数でも、やりたい演算に合わせて使い分けよう

参考:今回紹介したサンプルのまとめ

pythonCopyEditfoo(lambda x, y: x + y)      # 3+4=7
foo(lambda x, y: x - y)      # 3-4=-1
foo(lambda x, y: max(x, y))  # 3と4の大きい方→4
bar(lambda x: x * x)         # 5の2乗→25
bar(lambda x: abs(x))        # -3→3

「関数を引数で渡す」テクニックは、Pythonプログラミングの幅を大きく広げてくれます。ぜひいろんな演算で試してみてください!

コメント

タイトルとURLをコピーしました