向闭包表达式添加常量

时间:2014-10-25 14:51:47

标签: python closures

我有一个闭包,它接受一些状态变量并返回一个函数。

def function(state1,state2):
    def closure(variable):
        return state1*variable - state2*variable
    return closure

所以现在如果我想使用它,我只是这样做:

a = function(1,2)

a(10,20,30)

但现在我想做一些稍微不同的事情,以便从闭包函数中减去一个常量值,例如。

a(10,20,30) - a(100)

我真正想做的是创建一个新功能:

def function2(subtract_value):
    return a - a(subtract_value)

但是python不允许我从函数对象中减去一个浮点数。

有没有人知道如何在不将subtract_value选项手动添加到函数1的情况下执行此操作?

1 个答案:

答案 0 :(得分:1)

您可以创建一个包含闭包函数的新函数。

def make_subtract(fn, val):
    def wrapper(x):
        return fn(x) - val
    return wrapper

然后这样称呼:

new_a = make_subtract(a, a(100))