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()
といった感じで書けるようになってました。
いやはや、勉強になります。