在此代码:为什么不同的变量名称会得到不同的结果(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)
的输出为 “函数内在0x107dea668”
如果我改变我到其他信,例如:
results = []
for i in [1, 2, 3, 4]:
def inner(y):
return i
results.append(inner)
for j in results:
print j(None)
输出为“4”
回答
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:在内部4315172208
:4315172208
呼叫功能内在0x101344d70
在循环:在内部4315172208
:4315172208
在内:功能内在0x101344d70
I:在内部4315172328
:4315172328
在内:4315172328
在内:在0x101344de8
在循环函数内4315172328
呼叫:函数内在0x101344de8
I:功能在0x101344e60内
在循环:4315172448
在内:4315172448
在内:4315172448
在内:4315172448
呼叫:函数内在0x101344e60
I:函数内在0x101344ed8
在循环:在内部4315172568
:4315172568
在内:4315172568
在内:4315172568
呼叫:函数内在0x101344ed8
你刚认识的'i' –
有关懒惰的评价:https://stackoverflow.com/questions/42805800/generator-comprehension-different-output-from-list-comprehension –
这是不相关懒惰的评估,这是一个背景问题。懒惰评估只是在需要时评估,而不是在哪里评估。 –