w tym kodzie:Dlaczego różne nazwy zmiennych mają różne wyniki (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)
wyjście jest "funkcja wewnętrzna w 0x107dea668"
gdybym zmienić í do drugiej litery, na przykład:
results = []
for i in [1, 2, 3, 4]:
def inner(y):
return i
results.append(inner)
for j in results:
print j(None)
wyjście to "4"
odpowiedzi
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: funkcją wewnętrzną w 0x101344d70
w pętli: 4315172208
w wewnętrzny: 4315172208
w wewnętrzny: 4315172208
w wewnętrznej: 4315172208
połączenia: funkcja wewnętrzna w 0x101344d70
I: funkcją wewnętrzną w 0x101344de8
w pętli: 4315172328
w wewnętrzny: 4315172328
w wewnętrzny: 4315172328
w wewnętrzny: 4315172328
połączenie: funkcją wewnętrzną w 0x101344de8
I: w funkcji wewnętrznej w 0x101344e60
w pętli: 4315172448
w wewnętrzny: 4315172448
w wewnętrzny: 4315172448
w wewnętrzny: 4315172448
połączenie: funkcją wewnętrzną w 0x101344e60
I: funkcją wewnętrzną w 0x101344ed8
w pętli: 4315172568
w wewnętrzny: 4315172568
w wewnętrzny: 4315172568
w wewnętrzny: 4315172568
połączenie: funkcją wewnętrzną w 0x101344ed8
po prostu spotkał leniwe ocenę 'I' –
związane: https://stackoverflow.com/questions/42805800/generator-comprehension-different-output-from-list-comprehension –
To nie jest powiązany do leniwej oceny, jest to kwestia kontekstowa. Leniwa ocena polega na ocenie w razie potrzeby, a nie gdzie. –