我试图存储一堆形式为lambda的表达式:
lambda a, b: abs(a,b) != copy.deepcopy(diff)
在循环中。在循环的每次迭代中, diff 的值都会发生变化。当它改变时,lambda表达式也会改变。我想保留公式。我尝试过以下方法:
user.input :user_id, :input_html => { :value => 'your text' }
但它不起作用。
我对如何实现这一点有所了解?
答案 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))
我们得到True
和True
,因为更改diff变量的值不会更改lambda中diff参数的默认值。