2013-07-03 74 views
1

是什么地方利弊定义如下不同的迭代器给了我不同的答案

for i in range(0,3): print cons[i]['fun'](x0) 

for f in cons: print f['fun'](x0) 

的区别

A = np.asmatrix([[1,0,0],[0,1,0],[0,0,1]]) 
x0 = np.asarray([1,2,0]) 
cons = list() 
for i in range(0,3): cons.append({'fun':lambda x: np.dot(A[i],x)}) 

回答

4

你的问题可能是有关事实上你有一个使用未绑定变量的lambda子句(i)。改变你的代码是这样的:

for i in range(0,3): cons.append({'fun':lambda x, i=i: np.dot(A[i],x)}) 

(碘。E只是插入, i=i。)

这样的i值是拉姆达条款的一部分,而不是从周围范围拍摄。

+0

谢谢!修复它。 因此,如果我正确地理解了这一点,每次'我'增加它更新列表中的前一个条目'A [i]'以及? – user2546580

+0

@ user2546580你可以接受答案... –

+0

接受会很好,但有一个悬而未决的问题;这里是我的回应:是的。你创建的所有lambda表达式都依赖于一个名为'i'的变量,它们不保存它们。周围范围中'i'的值决定了评估时的结果。如果此时在周围范围内没有'i',则会发生异常。 – Alfe

相关问题