# [Tutor] lamda in list comp

Danny Yoo dyoo at hashcollision.org
Mon Mar 30 03:16:32 CEST 2015

```On Sat, Mar 28, 2015 at 6:25 PM, Jim Mooney <cybervigilante at gmail.com> wrote:
> Shouldn't this give me a list of squares?
> [lambda x: x**2 for x in range(10)]
>
> <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.
```