Dictionary of Functions

Chris Kaynor ckaynor at zindagigames.com
Thu Nov 15 18:13:20 CET 2012

On Thu, Nov 15, 2012 at 8:04 AM, Kevin Gullikson
<kevin.gullikson at gmail.com> wrote:
> Hi all,
> I am trying to make a dictionary of functions, where each entry in the
> dictionary is the same function with a few of the parameters set to specific
> parameters. My actual use is pretty complicated, but I managed to boil down
> the issue I am having to the following example:
> In [1]: def test_fcn(a, x):
>    ...:     return a*x
>    ...:
> In [2]: fcn_dict = {}
> In [3]: for i in [1,2,3]:
>    ...:     fcn_dict[i] = lambda x: test_fcn(i, x)
>    ...:

In this case, I would recommend using functools.partial instead of a lambda.
It will solve this problem (although MRAB's solution will as well), is
trivially faster (likely insignificant in any real application), and,
IMO, clearer:

for i in [1,2,3]:
    fcn_dict[i] = functools.partial(test_fcn, i)

Note that this only works if you are either only specifying the first
arguments by position, or specifying arguments by keyword. There is no
way to specify the second argument by position; you'd have to pass it
as a keyword argument.

More information about the Python-list mailing list