Pythonの技法:関数型言語スタイル「関数の部分適用」

文:Nick Gibson(Builder AU)  翻訳校正:原井彰弘
2008-01-09 06:00:00
  • このエントリーをはてなブックマークに追加

 次の例では、コールバックを用いてアイテムをGUIのウィジェットに追加している。この例ではTkinterツールキットを用いているので、もしなじみがなければ前回のハウツーに目を通して欲しい。以下のコードでは、アプリケーションのウィンドウのセットアップを行い、スクロールバーを持ったリストボックスを追加している。

from functools import *
from Tkinter import *

root = Tk()
root.geometry("600x400")

scrollbar = Scrollbar(root, orient=VERTICAL)
listbox = Listbox(root, yscrollcommand=scrollbar.set)

listbox.pack(side=LEFT, fill=BOTH, expand=1)
scrollbar.pack(side=RIGHT, fill=Y)

 さて、リストボックスに文字列を追加するためには、以下のような文を用いる。

listbox.insert(END, "item")

 しかし、このコードは扱いにくく、引数を必要とするためコールバックとして使用できないという問題がある。もしリストに多数のアイテムを素早く追加する必要があるのなら、部分適用をlistbox.insertメソッドに対して行うことにより、以下のようなコードを記述することができる。

add = partial(listbox.insert, END)
add("item")

 また、listbox.insertメソッドをコールバックとして使用したければ、以下のようにして文字列も同様に部分適用すればよい。

additem = partial(listbox.insert, END, "item")
additem()

 関数の部分適用は、一つのオブジェクトに対してさまざまな入力を適用する必要がある場合や、関数の引数一つを定数にバインドしたい場合には役立つ手法だ。コードの質を大きく左右することはないだろうが、部分適用を用いれば保守が容易なコードをより簡単に記述できるようになるのである。

  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]