Python functools覚書き


Python2.5で追加された functoolsモジュール、結構便利ですね。
特にTkinterを使ってGUIを作ってる時とか。ということで、functoolsについての覚書です。


たとえば、Tkinterのボタンとかにコールバック関数を登録しようとした場合、
こんな感じになると思います。

import Tkinter as Tk


def cb_func():
    print 'button pressed'

root = Tk.Tk()

bt = Tk.Button(master=root, text='Button', command=cb_func)
bt.pack()

root.mainloop()

で、コールバック関数に引数を渡したいなぁ。。と思った場合、Python 2.5よりも前では

import Tkinter as Tk

class ButtonCB:
    def __init__(self, text):
        self.text = text

    def __call__(self):
        print self.text


root = Tk.Tk()

bt = Tk.Button(master=root, text='Button', command=ButtonCB('Button Pressed'))
bt.pack()

root.mainloop()

といった具合にしていましたが、Python2.5からは

import Tkinter as Tk
import functools


def cb_func(text):
    print text

root = Tk.Tk()

bt = Tk.Button(master=root, 
               text='Button',
               command=functools.partial(cb_func, 'Button Pressed'))
bt.pack()

root.mainloop()

といった感じで書けるようになってました。

いやはや、勉強になります。