PYTHON MEBY

Pythonで部分適用を行う (functools.partial)

この記事では、Pythonのfunctools.partialを用いて関数の部分適用を行う方法を説明します。引数を固定して新しい関数を生成することで、コードを簡潔に、そして再利用可能にするテクニックを学びます。

目次

部分適用とは?

部分適用とは、関数の引数の一部に値を事前に設定し、新しい関数を作成するテクニックです。事前に値を設定することで、関数をより簡潔に呼び出したり、特定の引数を持つ関数を簡単に生成することができます。Pythonではfunctools.partialを利用して部分適用を行うことができます。

functools.partialの使い方

functools.partialは、既存の関数と、その関数に渡す引数の一部を指定して、新しい部分適用された関数を生成します。

from functools import partial

def add(x, y):
  return x + y

# yに5を固定した部分適用関数を作成
add_five = partial(add, y=5)

# 部分適用関数を呼び出す
result = add_five(3)  # 3 + 5 = 8
print(result)  # 出力: 8

上記のように、partial(関数名, 引数名1=値1, 引数名2=値2, ...) で部分適用関数を生成します。キーワード引数で値を指定する必要がある点に注意してください。

実践例:引数の一部を固定する

例えば、特定のディレクトリにファイルを保存する関数を作りたい場合、ディレクトリパスを引数に持つ関数を部分適用することで、ディレクトリパスを固定した関数を簡単に作成できます。

import os
from functools import partial

def save_file(filepath, content):
  with open(filepath, 'w') as f:
    f.write(content)

# カレントディレクトリにファイルを保存する関数を作成
save_to_current_dir = partial(save_file, filepath=os.getcwd() + '/my_file.txt')

# ファイルを保存
save_to_current_dir('Hello, world!')

実践例:コールバック関数に利用する

GUIプログラミングなどでは、コールバック関数として、特定の引数を持つ関数を渡す場合があります。部分適用を使うと、コールバック関数を簡単に作成できます。

from functools import partial

def my_callback(value, extra_arg):
  print(f'Value: {value}, Extra arg: {extra_arg}')

# extra_argを固定した部分適用関数を作成
callback_with_extra = partial(my_callback, extra_arg='Hello')

# コールバック関数として使用
callback_with_extra(10)

まとめ

functools.partialは、関数の部分適用を行うための便利なツールです。引数を固定することでコードを簡潔に、そして再利用可能にすることができます。様々な場面で活用することで、より効率的で読みやすいコードを作成できるでしょう。

関連記事