[python] (no subject)
Petr Prikryl
PrikrylP na skil.cz
Pondělí Říjen 30 10:27:51 CET 2006
Od Python 2.5 lze taky využít nový standardní modul
functools a jím definovanou funkci partial() --
viz dokumentace
"6.6 functools -- Higher order functions and
operations on callable objects. "
Příklad pak lze přepsat takto:
import functools
from Tkinter import*
def pis(co):
print co
okno=Tk()
menubar = Menu(okno)
menu = Menu(menubar, tearoff=0)
cisla=[1,2,3,4,5,6,7,8,9,10]
for prvek in cisla:
menu.add_cascade(label=prvek,
command=functools.partial(pis, prvek))
menubar.add_cascade(label="cisla",menu=menu)
okno.config(menu=menubar)
mainloop()
Radek Kanovsky
> Radek Kanovsky wrote:
>
> > Aby to fungovalo, musi se pouzit nejaky trik:
> > lambda p=prvek: pis(p)
> > nebo
> > new.instancemethod(lambda p:pis(p), prvek, type(prvek))
>
> Ale necistsi reseni bez triku (a jeste pomerne kratke) je asi tohle:
>
> def gen_pis_prvek(prvek):
> return lambda: pis(prvek)
>
> for prvek in cisla:
> menu.add_cascade(label=prvek, command=gen_pis_prvek(prvek))
Další informace o konferenci Python