这是多行lambda的更有趣的实现。由于python如何使用缩进来构造代码,因此无法实现。
但是幸运的是,可以使用数组和括号禁用缩进格式。
正如已经指出的那样,您可以这样编写代码:
lambda args: (expr1, expr2,... exprN)
从理论上讲,如果可以保证从左到右进行求值,那么它会起作用,但是仍然会丢失从一个表达式传递到另一个表达式的值。
实现较为冗长的方法的一种方法是
lambda args: [lambda1, lambda2, ..., lambdaN]
每个lambda接收前一个参数的位置。
def let(*funcs):
def wrap(args):
result = args
for func in funcs:
if not isinstance(result, tuple):
result = (result,)
result = func(*result)
return result
return wrap
这种方法使您可以编写有点像Lisp / scheme的东西。
所以你可以这样写:
let(lambda x, y: x+y)((1, 2))
可以使用更复杂的方法来计算斜边
lst = [(1,2), (2,3)]
result = map(let(
lambda x, y: (x**2, y**2),
lambda x, y: (x + y) ** (1/2)
), lst)
这将返回一个标量数字列表,因此可用于将多个值减少为一个。
拥有那么多lambda肯定不会非常有效,但是如果您受到限制,那么它可能是快速完成某项工作并将其重写为实际函数的好方法。