enzo michelangeli <enzom...@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)]
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to