Это связано с точкой, в которой d связан. Лямбда-функции все указывают на переменную d
, а не на текущее значение , поэтому, когда вы обновляете d
в следующей итерации, это обновление просматривается через все ваши функции.
Для более простого примера:
funcs = []
for x in [1,2,3]:
funcs.append(lambda: x)
for f in funcs:
print f()
# output:
3
3
3
Вы можете обойти это, добавив дополнительную функцию, например:
def makeFunc(x):
return lambda: x
funcs = []
for x in [1,2,3]:
funcs.append(makeFunc(x))
for f in funcs:
print f()
# output:
1
2
3
Вы также можете зафиксировать область видимости внутри выражения лямбда
lambda bound_x=x: bound_x
. Однако в целом это не очень хорошая практика, поскольку вы изменили подпись своей функции.
При загрузке из кэша будут запущены как Network.loadingFinished
, так и Network.requestServedFromCache