Tôi đang cố tạo các chức năng bên trong vòng lặp và lưu chúng trong từ điển. Vấn đề là tất cả các mục trong từ điển dường như kết thúc ánh xạ tới hàm được tạo cuối cùng. Mã này đi như thế này:Tạo các chức năng trong vòng lặp
d = {}
def test(**kwargs):
for k in kwargs:
def f():
print k, kwargs[k]
d[k] = f
f()
test(foo=1, bar=2)
print 'should print the same output as before'
d['foo']()
d['bar']()
này kết quả đầu ra:
foo 1
bar 2
should print the same output as before
bar 2
bar 2
Bất cứ ý tưởng tại sao?
như một lời nhắc nhở cho bản thân mình: http://docs.python-guide.org/en/latest/writing/gotchas/#late-binding-closures –