@Bjornie
Изучаю Python

Как работает это замыкание (по книге Лутца)?

Помогите понять как работает данный код.
Написал в комментариях как я понимаю этот код, но не понимаю, почему функция работает передав только аргумент N, а функция action возвращает возведение в степень без явного указанного аргумента X. Откуда она его берет?

def maker(N):
	def action(X):
		return X ** N
	return action

a = maker(2) # 1-й вызов, присваивание объекта функции maker переменной a, передача аргументу N значение "2"

print(a)
>>> <function maker.<locals>.action at 0x0000018DFFA2BA60>

print(a(3)) # 2-й вызов, аргумент N равен 3, т.е. функция action возвращает 3 ** 2. Почему тройка идет как X?
>>> 9

print(a(4))
>>> 16 # и т.д.
  • Вопрос задан
  • 603 просмотра
Пригласить эксперта
Ответы на вопрос 1
@PythonDeveloper
Задача внешней функции - вернуть внутреннюю с подставленным в тело внутренней аргументом, переданным во внешнюю. При связывании переменной a с результатом работы внешней фунции, с а свяжется внутренняя фунция, созданная внешней. В качестве N в ней уже будет переданное ранее во вненюю значение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы