[Numpy-discussion] function name as parameter

Johann Cohen-Tanugi cohen@lpta.in2p3...
Wed Oct 20 08:51:35 CDT 2010


If you really need to pass the function name :
In [3]: def my_func(x):
    ...:     return 2*x

In [4]: def caller(fname,x):
    ...:     return eval("%s(%f)"%(fname,x))

In [5]: caller("my_func",2)
Out[5]: 4.0


On 10/20/2010 03:46 PM, Zachary Pincus wrote:
>> I'm trying to write an implementation of the amoeba function from
>> numerical recipes and need to be able to pass a function name and
>> parameter list to be called from within the amoeba function.  Simply
>> passing the name as a string doesn't work since python doesn't know it
>> is a function and throws a typeerror.  Is there something similar to
>> IDL's 'call_function' routine in python/numpy or a pythonic/numpy
>> means
>> of passing function names?
>>      
> Just pass the function itself! For example:
>
> def foo():
>     print 6
>
> def call_function_repeatedly(func, count):
>     for i in range(count):
>       func()
>
> call_function_repeatedly(foo, 2) # calls foo twice
>
> bar = foo
> bar() # still calls foo... we've just assigned the function to a
> different name
>
>
> In python, functions (and classes, and everything else) are first-
> class objects and can be assigned to variables, passed around, etc,
> etc, just as anything else.
>
> However, note that scipy.optimize.fmin implements the Nelder-Mead
> simplex algorithm, which is (I think) the same as the "amoeba"
> optimizer. Also you might be interested in the openopt package, which
> implements more optimizers a bit more consistently than scipy.optimize.
>
> Zach
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>    


More information about the NumPy-Discussion mailing list