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