def funct(): x = 4 action = (lambda n: x ** n) return action x = funct() print(x(2)) # prints 16
... Я не совсем понимаю, почему 2 назначается автоматически?
n - аргумент анонимной функции, возвращаемой funct. Точно эквивалентное определение funct равно
n
funct
def funct(): x = 4 def action(n): return x ** n return action
Имеет ли эта форма смысл?
Он не присваивается «автоматически»: он присваивается очень явно, а non - автоматически путем передачи его в качестве фактического аргумента, соответствующего параметру n. Этот сложный способ установки x почти идентичен (за исключением x.__name__ и других незначительных интроспективных подробностей) def x(n): return 4**n.
x
x.__name__
def x(n): return 4**n