Задать вопрос
@zybk

Как параметр в лямбде соотносится с параметром в функции?

Изучаю Python здесь w3schools
Там есть следующий пример для вычисления удвоенного числа:

def myfunc(n):
  return lambda a : a * n

mydoubler = myfunc(2)

print(mydoubler(11))


Я не понимаю до конца этот пример.
Программа доходит до строки print(mydoubler(11)). Чтобы напечать результат выполнения функции mydoubler, программа вызывает эту функцию с аргументом 11, для этого программа идёт к строке mydoubler = myfunc(2).
В строке mydoubler = myfunc(2) вызывается функция mydoubler, которая ссылается на другую функцию — myfunc, с аргументом 2.
Функция myfunc в свою очередь идёт к блоку кода
def myfunc(n):
  return lambda a : a * n

и передаёт аргумент 2 в определение функции def myfunc(n):
Блок кода
def myfunc(n):
  return lambda a : a * n

содержит третью функцию, лямбда-функцию. Эта лямбда стоит после оператора return функции myfunc, то есть myfunc возвратит то, что вычислится в результате выполнения лямбды.
Лямбда принимает содержит "a" в качестве параметра, а возвращает результат умножения "a" на "n", где "n" — параметр myfunc.
Я не могу понять, как "a" в лямбде соотносится с аргументом mydoubler. Когда посмотрел, как выполняется программа, то я понял, что "a" и аргумент mydoubler — это одно и то же. Как программа понимает, что 11 надо поместить в "a" лямбды?
Спасибо заранее.
  • Вопрос задан
  • 105 просмотров
Подписаться 1 Средний 2 комментария
Решение пользователя Максим Припадчев К ответам на вопрос (2)
Maksim_64
@Maksim_64
Data Analyst
lambda - это безымянные функции.
например
f = lambda x: x**2
print(f(4))
выведет 16. f - это указатель на безымянную функцию с одним параметром.
Тоже самое и в твоем коде твоя функция myfunc, возвращает безымянную функцию, твой n подставит выражение и вернет функцию. lambda a:a*2 дальше как в пример выше ты вызываешь свою функцию с аргументом a=11 и получаешь 22.

Эта лямбда стоит после оператора return функции myfunc, то есть myfunc возвратит то, что вычислится в результате выполнения лямбды.
Вот здесь ошибка в твоей логике. Он вернет функцию а не вычислит ее только вместо n ,будет параметр из myfunc.
Ответ написан