Пардон, а замыкание это что?
На языке ассемблера отсутствует понятие функции. Соответственно, функцию с замыканием не сделать.
Что значит функция с замыканием?
Это такая функция, которая возвращает ссылку на объект, созданный внутри данной функции, который продолжает существовать после того, как функция закончит свою работу. Пример на питоне: def factory(): child = "я продолжаю жить" return child t = factory() factory() отработала своё, сборщик мусора её должен уничтожить. Но внутри себя она создала child, который продолжает жить снаружи функции.
под это определение подходит любой конструктор
Фабричная функция, функция-фабрика, factory function -- всё это функция с замыканием
Ещё один классический пример def factory(x): def magnify(n): return n**x return magnify square_func = factory(2) cube_func = factory(3) for n in [2, 3, 5]: print(square_func(n), cube_func(n) вывод: 4 8 9 27 25 125 Здесь каждый раз factory() возвращает ссылку на новый вид функции magnify(). "Новый вид" magnify() возникает потому, что внутри magnify есть ссылка на внешнюю для magnify() переменную x, которая при разном вызове функции factory() является разной.
Всё это относится к продвинутым программистским трюкам. Я бы советовал пореже пользоваться ими в пользу ясности и понятности первоначального замысла. В конце-концов, чтобы писать странный, непонятный и нетривиальный код и был придуман ассемблер.
Интересно, а как в функцию передается n?
Там передаётся как аргумент при вызове sqaure_func()
И при этом в описании функции нет явного указания на то, что переменная передаётся именно как аргумент?
Вернее, n передаётся при вызове factory(). Factory(), в свою очередь, возвращает ссылку на объект типа функция. Но эта возвращаемая функция magnify связана с переданным n. В том и суть замыкания.
Замечательно) А если будет 2 аргумента, как функция поймёт, где какой?
Какая из функций? Factory или magnify?
Так ведь n используется только в magnify)
Обсуждают сегодня