如何在没有赋值和组合的情况下更改lambda表达式的功能?

时间:2014-12-17 09:17:48

标签: python lambda

鉴于表达式f = lambda x: x+x,可以使用单行表达式编辑f的功能,以便实现以下结果:

f(7) = 14
`the expression subtracts one from the return value of f`
f(7) = 13

2 个答案:

答案 0 :(得分:2)

您可以重新分配f,但是,只需要在一行中执行此操作将非常棘手,因为您需要保留对旧lambda的引用:

old_f = f
f = lambda x: old_f(x) - 1

您可以使用闭包:

f = (lambda old_f: (lambda x: old_f(x) - 1))(f)

答案 1 :(得分:1)

您可以使用默认参数值通过闭包保留前一个函数,而不需要引入任何新变量:

f = lambda x: x*2
print f(7)  # --> 14

f = (lambda prev_f=f: (lambda x: prev_f(x) - 1))(f)
print f(7)  # --> 13