В вашем коде arr.append(lambda:x**2)
, x
находится за пределами функции.
Когда вы завершаете sh, l oop, x
устанавливается на 9 (от 0 до 9) .
Тогда x**2
равно 81, поэтому arr[4]()
будет переоценивать x
, поэтому результат будет 81.
Просто для удовольствия, вы можете попробовать то, что хотите, с следующее:
f_generator = lambda i: lambda: i**2
arr = [f_generator(i) for i in range(10)]
arr[4]() # 16