在此代碼:爲什麼不同的變量名稱會得到不同的結果(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 –
這是不相關懶惰的評估,這是一個背景問題。懶惰評估只是在需要時評估,而不是在哪裏評估。 –