# lambda in Python: is it returning multiple values?

To begin with let’s just have look at the old school of lambda in Python.

As we know, `lambda x: return x**2` is exactly equivalent to

`def squared(x): return x**2`

Now look at this

`>>> f1 = lambda x,y,z: x+1, y+1, z+1>>> print(f1(1,1,1))`

What will you get on the screen? A tuple of (2, 2, 2)? No. You get an error instead.

```Traceback (most recent call last):
File "<pyshell#7>", line 1, in
print(f1(1,1,1))
TypeError: 'tuple' object is not callable```

Now that the “returning part” of lambda is covering the contents before comma only, let’s explicitly add the brackets:

`>>> f1 = lambda x,y,z: (x+1, y+1, z+1)>>> print(f1(1,1,1))(2, 2, 2)`

Things begin to become clearer now, but what is the ‘tuple’ in the wrong example? It’s `f1`. Have a look at this:

`>>> y = 10>>> z = 20>>> f1 = lambda x,y,z: x+1, y+1, z+1>>> type(f1)<class 'tuple'>>>> print(f1)(<function <lambda> at 0x7feb222116a8>, 11, 21)`

This time the lambda becomes something like `def _func(x, y, z): return x+1` – only returns one value and now takes useless `y` and `z` as its arguments. You can confirm by:

`>>> print(f1(2,-10,-20))3`

All done!