不同的迭代器给了我不同的答案

时间:2013-07-03 13:28:41

标签: python numpy

之间有什么区别
for i in range(0,3): print cons[i]['fun'](x0)

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

其中cons定义如下

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)})

1 个答案:

答案 0 :(得分:4)

您的问题可能与您使用未绑定变量(i)的lambda子句有关。像这样更改你的代码:

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

(我只是插入, i=i。)

这样i的值是lambda子句的一部分,而不是从周围的范围中获取。