检查参数之间的等式是lambda表达式中的变量

时间:2017-02-27 09:03:23

标签: python lambda

我试图存储一堆形式为lambda的表达式:

lambda a, b: abs(a,b) != copy.deepcopy(diff)

在循环中。在循环的每次迭代中, diff 的值都会发生变化。当它改变时,lambda表达式也会改变。我想保留公式。我尝试过以下方法:

user.input :user_id, :input_html => { :value => 'your text' }

但它不起作用。

我对如何实现这一点有所了解?

2 个答案:

答案 0 :(得分:2)

使用partial

from functools import partial
def foo(a,b,d):
    return abs(a,b) != d

toStore = []
for i in xrange(5):
    for j in xrange(i, 5):
        diff = abs(j - i)
        toStore.append(partial(foo, d=diff))

部分绑定函数参数,每次构建一个可调用的部分对象时,它将作为函数,其参数固定为部分应用的值。

如果您想稍后再打电话,可以选择:

toStore[0](5, 5)

答案 1 :(得分:0)

Daniel Sanches的回答是一个很好的方法。确保lambda使用变量的当前值的另一种方法,而不是变量在稍后调用时具有的值是将值作为参数的默认值传递:

所以这不起作用:

diff = abs(5-7)
tester = lambda a, b: abs(a-b) != diff
print(tester(5, 5+3))
diff = abs(5-8)
print(tester(5, 5+3))

因为它返回True然后False。但如果我们这样做:

diff = abs(5-7)
tester = lambda a, b, diff=diff: abs(a-b) != diff
print(tester(5,5+3))
diff = abs(5-8)
print(tester(5,5+3))

我们得到TrueTrue,因为更改diff变量的值不会更改lambda中diff参数的默认值。