lambda-funcs problem
hi all, I need to create a Python list of lambda-funcs that are dependent on the number of the ones, for example F = [] for i in xrange(N): F.append(lambda x: x + i) however, the example don't work - since i in end is N-1 it yields x+ (N-1) for any func. So what's the best way to make it valid? Evaluation speed is also very important to me. Thank you in advance, D. -- http://mail.python.org/mailman/listinfo/python-list
Re: lambda-funcs problem
On Wed, 19 Sep 2007 04:39:44 -0700, dmitrey.kroshko wrote: I need to create a Python list of lambda-funcs that are dependent on the number of the ones, for example F = [] for i in xrange(N): F.append(lambda x: x + i) however, the example don't work - since i in end is N-1 it yields x+ (N-1) for any func. So what's the best way to make it valid? The variable is bound to the name `i` when the lambda function is created not to the value that `i` had at that time. The idiomatic way is to use a default value for an argument because those are evaluated at definition time of functions:: F.append(lambda x, i=i: x + i) Ciao, Marc 'BlackJack' Rintsch -- http://mail.python.org/mailman/listinfo/python-list
RE: lambda-funcs problem
On Behalf Of [EMAIL PROTECTED] F = [] for i in xrange(N): F.append(lambda x: x + i) however, the example don't work - since i in end is N-1 it yields x+ (N-1) for any func. How about: def make_adder(i): def adder(x): return x+i return adder funcs = [make_adder(i) for i in xrange(10)] print [func(10) for func in funcs] [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] Regards, Ryan Ginstrom -- http://mail.python.org/mailman/listinfo/python-list
Re: lambda-funcs problem
[EMAIL PROTECTED] a écrit : hi all, I need to create a Python list of lambda-funcs that are dependent on the number of the ones, for example F = [] for i in xrange(N): F.append(lambda x: x + i) however, the example don't work - since i in end is N-1 it yields x+ (N-1) for any func. So what's the best way to make it valid? It's a FAQ. The answer is (using list-comp instead of a for loop): funcs = [lambda x, i=i : x + i for i in xrange(n)] -- http://mail.python.org/mailman/listinfo/python-list
Re: lambda-funcs problem
Ryan Ginstrom software at ginstrom.com writes: How about: def make_adder(i): def adder(x): return x+i return adder funcs = [make_adder(i) for i in xrange(10)] print [func(10) for func in funcs] [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] Or if you want a one liner: funcs = [(lambda i: lambda x: x+i)(i) for i in xrange(10)] Stéphane -- http://mail.python.org/mailman/listinfo/python-list
Re: lambda-funcs problem
Stéphane Larouche a écrit : (snip) funcs = [(lambda i: lambda x: x+i)(i) for i in xrange(10)] A bit more complex than necessary... The canonical solution is funcs = [lambda x, i=i: x+i for i in xrange(10)] -- http://mail.python.org/mailman/listinfo/python-list