Parameterized functions of no arguments?

Rotwang sg552 at hotmail.co.uk
Fri Feb 11 07:32:56 CET 2011


On 11/02/2011 06:19, Paul Rubin wrote:
> 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))

functools is new to me, I will look into it. Thanks.


> 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))

I don't understand why this works. What is the difference between

     (lambda x: lambda: f(x))(k)

and

     lambda: f(k)

?



More information about the Python-list mailing list