trong mã này:Tại sao các tên biến khác nhau lại có kết quả khác nhau (python2.7)?
results = []
for i in [1, 2, 3, 4]:
def inner(y):
return i
results.append(inner)
for i in results:
print i(None)
đầu ra là "chức năng nội tại 0x107dea668"
nếu tôi thay đổi i lá thư khác, ví dụ:
results = []
for i in [1, 2, 3, 4]:
def inner(y):
return i
results.append(inner)
for j in results:
print j(None)
đầu ra là "4"
trả lời
results = []
for i in [1, 2, 3, 4]:
def inner(y):
print "in inner:%s " % id(i)
return i
results.append(inner)
# i -> 4
for i in results:
# i -> func inner
print "i: %s" % i
print "in loop: %s " % id(i)
# func inner <===> A
# i == A -> return i -> return A, so when call funtion inner, will return itself
# print "call: %s" % i(None)
print "call: %s" % i(None)(None)(None)
print "------------------------------"
i: chức năng nội tại 0x101344d70
trong vòng lặp: 4315172208
trong nội: 4315172208
trong nội: 4315172208
trong nội: 4315172208
gọi: hàm bên trong tại 0x101344d70
i: chức năng nội tại 0x101344de8
trong vòng lặp: 4315172328
trong nội: 4315172328
trong nội: 4315172328
trong nội: 4315172328
gọi: chức năng nội tại 0x101344de8
i: chức năng nội tại 0x101344e60
trong vòng lặp: 4315172448
trong nội: 4315172448
trong nội: 4315172448
trong nội: 4315172448
gọi: chức năng nội tại 0x101344e60
i: chức năng nội tại 0x101344ed8
trong vòng lặp: 4315172568
trong nội: 4315172568
trong nội: 4315172568
trong nội: 4315172568
gọi: chức năng nội tại 0x101344ed8
bạn chỉ gặp thẩm lười biếng của 'i' –
liên quan: https://stackoverflow.com/questions/42805800/generator-comprehension-different-output-from-list-comprehension –
Đây không phải là có liên quan để đánh giá lười biếng, đó là một vấn đề ngữ cảnh. Đánh giá lười biếng là về đánh giá chỉ khi cần thiết, không phải ở đâu. –