если lambda-выражение или инструкция def вложены в цикл внутри другой
функции и вложенная функция ссылается на переменную из объемлющей об-
ласти видимости, которая изменяется в цикле, все функции, созданные в этом
цикле, будут иметь одно и то же значение – значение, которое имела перемен-
ная на последней итерации.
def makeActions():
acts = []
for i in range(5): # Сохранить каждое значение i
acts.append(lambda x: i ** x) # Все запомнят последнее значение i!
return acts
acts = makeActions()
print(acts[0].__closure__)
print(acts[1].__closure__)
print(acts[0].__closure__[0].cell_contents)
def makeActions():
acts = []
for i in range(5):
def f(x, a=i):
return a ** x
acts.append(f)
return acts
acts.append(lambda x, a=i: a ** x)