Parameterized functions of no arguments?

Paul Rubin no.email at nospam.invalid
Fri Feb 11 07:19:57 CET 2011


Rotwang <sg552 at hotmail.co.uk> writes:
>     menu = Tkinter.Menu(master, tearoff = 0)
>     for k in x:
>         def f(j = k):
>             [do something that depends on j]
>         menu.add_command(label = str(k), command = f)
>
> Still, I'd like to know if there's a more elegant method for creating
> a set of functions indexed by an arbitrary list.

That is a standard python idiom.  These days maybe I'd use partial
evaluation:

   from functools import partial

   def f(k):  whatever...

   for k in x:
      menu.add_command(label=str(k), command=partial(f, k))

the "pure" approach would be something like

   def f(k):  whatever...

   for k in x:
     menu.add_command(label=str(k),
                      command=(lambda x: lambda: f(x))(k))



More information about the Python-list mailing list