[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