How to create a list of functions depending on a parameter?
Paul Rudin
paul.nospam at rudin.co.uk
Tue May 26 05:00:14 EDT 2009
enzo michelangeli <enzomich at gmail.com> writes:
> Let's suppose I want to create a list of n functions of a single
> argument, returning the sum between argument and index in the list, so
> that e.g.:
>
> f[0](10) will return 10
> f[3](12) will return 15
>
> ...and so on. I had naively though of coding:
>
> f = [lambda x: x+j for j in range(n)]
>
> Unfortunately, each function in the list f[]() behaves as a closure,
> and f[k](p) does NOT return p+k but p+j (for whatever value j has at
> the moment: typically n, the last value assumed by j in the list
> comprehension loop).
>
> Is there a way of achieving my goal? (Of course, n is not a constant
> known in advance, so I can't manually unroll the loop.)
>
class Foo(object):
def __init__(self, pos):
self.pos = pos
def __call__(self, arg):
return self.pos + arg
f = [Foo(x) for x in range(10)]
More information about the Python-list
mailing list