[Tutor] constructing semi-arbitrary functions
Dave Angel
davea at davea.name
Mon Feb 17 22:56:38 CET 2014
Peter Otten <__peter__ at web.de> Wrote in message:
> André Walker-Loud <walksloud at gmail.com> wrote:
>
>> Hello python tutors,
>>
>> I am utilizing a 3rd party numerical minimization routine. This routine
>> requires an input function, which takes as arguments, only the variables
>> with which to solve for. But I donât want to define all possible input
>> functions, in a giant switch, but rather, if I know I am fitting a
>> polynomial, I would like to just pass a list of parameters and have the
>> code know how to construct this function.
>>
>> To construct for example, a chisq function, you must pass not only the
>> variables to solve for, but also the data, uncertainties, and perhaps
>> other arguments. So it requires a little hacking to get it to work. With
>> the help of my friends and looking at similar code, I have come up with
>> two ways that work under my simple test cases, and I have a few questions
>> about them.
>>
>> The 3rd party minimizer utilizes the .func_code.co_varnames and
>> .func_code.co_argcount to determine the name and number of variables to
>> minimize. eg.
>>
>>> g = lambda x,c_0,c_1: c_0 + c_1 * x
>>> g.func_code.co_varnames
>> ('x', 'c_0', 'c_1â)
>>> g.func_code.co_argcount
>> 3
>>
>> so what is needed is a function
>>> def f(c_0,c_1):
>>> â¦#construct chi_sq(c_0,c_1,x,y,â¦)
>>
>>
>>
>> Question 1:
>> Is there a better way to accomplish (my hopefully clear) goals?
>
> I think you are looking for closures:
>
> def make_poly(coeff):
>
I would also recommend closures, but the particular case seems to
fit partial pretty well.
http://docs.python.org/2/library/functools.html#functools.partial
--
DaveA
More information about the Tutor
mailing list