lambda и оператор def, определяемый внутри функции, вкладывается в цикл, а вложенная функция ссылается на переменную из объемлющей области видимости, которая изменяется этим циклом, то все функции, генерируемые внутри цикла, будут иметь одно и то же значение — значение ссылаемой переменной на последней итерации цикла.Лямбда-функция, несмотря на цикл
for, будет запоминать последнее значение i, то есть 5:def makeActions():
acts = []
for i in range(5):
acts.append(lambda x: i ** x) # i в таких условиях всегда равен 4
return acts
Чтобы добиться задуманного, нужно передать текущее значение переменной из объемлющей области видимости посредством стандартного значения:
acts.append(lambda x, i=i: i ** x)