Multi-line lambdas are fine: Python will accept newlines in certain parts of an expression, and you can use '\' for others; e.g.
f = lambda x: [
x + y
for y in range(x)
if y % 2 == 0
]
>>> f(5)
[5, 7, 9]
Lambdas which perform multiple sequential steps are fine, since we can use tuples to evaluate expressions in order; e.g.
from sys import stdout
g = lambda x: (
stdout.write("Given {0}\n".format(repr(x))),
x.append(42),
stdout.write("Mutated to {0}\n".format(repr(x))),
len(x)
)[-1]
>>> my_list = [1, 2, 3]
>>> new_len = g(my_list)
Given [1, 2, 3]
Mutated to [1, 2, 3, 42]
>>> new_len
4
>>> my_list
[1, 2, 3, 42]
The problem is that many things in Python require statements, and lambdas cannot contain
any; not even one. For example, all of the following are single lines:
>>> throw = lambda e: raise e
File "", line 1
throw = lambda e: raise e
^^^^^
SyntaxError: invalid syntax
>>> identity = lambda x: return x
File "", line 1
identity = lambda x: return x
^^^^^^
SyntaxError: invalid syntax
>>> abs = lambda n: -1 * (n if n ", line 1
abs = lambda n: -1 * (n if n >> repeat = lambda f, n: for _ in range(n): f()
File "", line 1
repeat = lambda f, n: for _ in range(n): f()
^^^
SyntaxError: invalid syntax
>>> set_key = lambda d, k, v: d[k] = v
File "", line 1
set_key = lambda d, k, v: d[k] = v
^^^^^^^^^^^^^^^^^^^^
SyntaxError: cannot assign to lambda
>>> set_key = lambda d, k, v: (d[k] = v)
File "", line 1
set_key = lambda d, k, v: (d[k] = v)
^^^^
SyntaxError: cannot assign to subscript here. Maybe you meant '==' instead of '='?