Hi,
Duncan Booth wrote:
> "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote:
>
>> What I want is, the value of i should be bounded to the anonymous
>> function. And the output should like this:
>>
>> for f in a:
>>      print f()
>> 0
>> 1
>> 4
>> 9
>>
>> How to achieve this?
>
> Use default arguments when defining your function: default arguments are
> evaluated when the function is defined, bound arguments get the current
> value of the variable at the point when it is referenced during the call.
>
> Also, since you give your function a name anyway ('b') you might as well
> use a named function as being clearer than using lambda:
>
>>>> a = []
>>>> for i in range(4):
>       def b(i=i):
>               return i**2
>       a.append(b)
>
>       
>>>> for f in a:
>       f()
>
>       
> 0
> 1
> 4
> 9

Thanks for some quick replies.

I'm trying to minimize a function f(X) (X = [x1, x2, ..., xn]) using
scipy.optimize.fmin_cobyla.  The parameter of the function is a list of
N variables. fmin_cobyla also accept a 'cons' parameter as constraint
function, which is a list of functions.

In order to make sure all variables be larger than 0, I tried to created
constraint function like this:

cons = []
for i in range(N):
        c = lambda x: x[i] - 1e-10
        cons.append(c)

But when functions in cons are evaluated, the value in all functions are
all the same(N-1, which is the last value of i in the loop).

What I want is, when functions in cons be evaluated, every function
refers to a different variable in X.

Regards

Xiao Jianfeng

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to