在此代码中:
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:函数内部在0x101344d70
处在循环中:
内部4315172208在内部:4315172208
在内部:4315172208
在内部:4315172208
调用:函数内部在0x101344d70
i:函数内部在0x101344de8
处在循环中:
内部4315172328
在内部:4315172328
内部在:4315172328
内部在:4315172328调用:函数内部在0x101344de8
i:函数内部在0x101344e60
处在循环中:
内部4315172448在内部:4315172448
在内部:4315172448
在内部:4315172448
调用:函数内部在0x101344e60
i:内部函数在0x101344ed8
处循环:内部4315172568 :
内部:4315172568
内部:4315172568
内部:4315172568
调用:内部函数在0x101344ed8
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句