Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Re: Dictionary of Functions (http://www.velocityreviews.com/forums/t954533-re-dictionary-of-functions.html)

Chris Kaynor 11-15-2012 05:13 PM

Re: Dictionary of Functions
 
On Thu, Nov 15, 2012 at 8:04 AM, Kevin Gullikson
<kevin.gullikson@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.


All times are GMT. The time now is 09:45 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.