【问题标题】:Different iterators are giving me different answers [duplicate]不同的迭代器给了我不同的答案[重复]
【发布时间】:2013-07-01 05:21:48
【问题描述】:

有什么区别

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

【问题讨论】:

    标签: python numpy


    【解决方案1】:

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

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

    (即插入 , i=i。)

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

    【讨论】:

    • 谢谢!解决了它。因此,如果我理解正确,每次 'i' 递增时,它也会为列表中的前一个条目更新 'A[i]'?
    • @user2546580 你可以接受答案...
    • 接受会很好,但有一个悬而未决的问题;我的回答是:是的。您创建的所有 lambda 表达式都依赖于一个名为 i 的变量,它们自己并不持有该变量。周围范围内的i 的值决定了评估时的结果。如果此时周围范围内没有i,则会出现异常。
    猜你喜欢
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 2019-09-19
    • 2016-03-15
    相关资源
    最近更新 更多