On Sat, Mar 28, 2015 at 6:25 PM, Jim Mooney <cybervigila...@gmail.com> wrote: > Shouldn't this give me a list of squares? > [lambda x: x**2 for x in range(10)] > > Instead I'm getting ten of these (with different addresses) > <function <listcomp>.<lambda> at 0x01262A50>]
Mark Lawrence's answer shows how to correct this. Let's look at the problem a little more closely. To do so, one thing we can do is rewrite to try removing the use of lambdas. Here's a fairly similar situation to what you had: ###################### def square(x): return x * x [square for x in range(10)] ###################### If you saw that last expression, you might notice a mistake: we haven't called the function on an argument! We wanted to say: [square(x) for x in range(10)] Once we understand this, let's go back to your original expression: [lambda x: x**2 for x in range(10)] If we wanted to revise this so that it applied the function, we can do that: [(lambda x: x**2)(x) for x in range(10)] If you're a functional programmer, Python's list comprehension syntax will take a slight re-adjustment. List comprehensions do sort-of the same sort of thing as a functional map, but since it's built-in syntax, it does a bit more, in that the "mapper" is an expression that directly involves the mapped values. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor