:私は、例えば、他の文字にIを変更場合、出力は異なる変数名が異なる結果をもたらすのはなぜですか(python2.7)?このコードで
"0x107dea668で機能内側"
results = []
for i in [1, 2, 3, 4]:
def inner(y):
return i
results.append(inner)
for i in results:
print i(None)
ある
: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
:内側における4315172208
:4315172208
内側のループで0x101344d70
の内関数:機能インナー0x101344d70
I:内部における4315172328
:4315172328
内で:内側における4315172328
:ループ内0x101344de8
の内機能4315172328
コール:0x101344e60の内関数:内部機能0x101344de8
iにおけるインナーで4315172448
:4315172448
内で:内側における4315172448
ループ内
コール:インナー機能0x101344e60
でI:0x101344ed8
で機能内側:内側における4315172568:4315172568
内で:内側における4315172568
:4315172568
呼び出しループ内0x101344ed8
の内機能
あなただけの関連i' –
'の遅延評価を満たし:https://stackoverflow.com/questions/42805800/generator-comprehension-different-output-from-list-comprehension –
これは関係ありません怠惰な評価には、文脈の問題です。遅延評価とは、必要なときだけ評価することであり、必要なときは評価しません。 –