2014年1月21日火曜日

Pythonで部分適用

ちょっとしたコードを書いてて、Pythonで部分適用ってどうやるんだっけ?と思いました。
パッと思いついたのは以下のようなコード。
def add(x, y)
  return x + y

add2 = lambda y: add(2, y)
print(add2(3))

なんか微妙だなと思ってちょっと調べたらfunctoolsモジュールを使えば以下のように書けることが分かった。
import functools

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

add2 = functools.partial(add, 2)
print(add2(3))

ちゃんと標準ライブラリでサポートされてましたね。

ちなみにfunctools.partial()の第一引数には呼び出し可能オブジェクトなら何でも渡せる。
lambdaでも__call__()を実装したクラスのインスタンスでもOKです。

0 件のコメント:

コメントを投稿