Python闭包没有按预期运行

时间:2015-06-07 16:39:32

标签: python closures

以下Python代码:

def foo():
    t = []
    for i in range(1, 3):
        def bar():
            return i * i
        t.append(bar)
    return t

for f in foo():
    print(f())

输出:4 4。为什么不是第一个呼叫输出1?我认为闭包bar()可以保存i的当前值。

BTW,几乎相当于Lua代码:

function foo()
    local t = {}
    for i = 1, 2 do
        local bar = function() return i * i end
        table.insert(t, bar)
    end
    return t
end

for _, f in ipairs(foo()) do
    print(f())
end

按我的预期输出1 4

0 个答案:

没有答案