Вы фактически передаете i
по имени.
fl=[lambda x: x**i for i in range(5)]
Каждый раз, когда выполняется lambda
, он связывает ту же самую i
с функцией, поэтому, когда функция выполняется (позже), она использует текущее значение тогда i
будет 4).Вместо этого вы должны передать его в качестве аргумента по умолчанию:
fl=[lambda x, j=i: x**j for i in range(5)]
На самом деле, я заметил, что вы неправильно используете partial
.Здесь:
fl = [partial(lambda x, y: y ** x, i) for i in range(5)]
Это также работает.