Конкатенация лямбда-функций в Python 3 - PullRequest
0 голосов
/ 24 июня 2019

Я получил следующий код:

two_to_one = lambda g: (lambda y: g(y, y))
one_to_two = lambda f: (lambda x, y: f(x)+f(y))
h=one_to_two(two_to_one (lambda x, y: x*y))
print (h(3, 2)) #prints 13

Тем не менее, я застрял на том, как отлаживать все это, мне не совсем удалось понять, почему оно печатает 13. Это просто вопрос для мозгов, но я хотел бы получить некоторое представление о том, как справиться с этим правильно!

1 Ответ

2 голосов
/ 24 июня 2019

Чтобы понять это, вы должны проанализировать, что он делает:

  • two_to_one = lambda g: (lambda y: g(y, y)) - это функция декоратора, которая превращает функцию g, которая принимает два параметра в один, который принимает одинпараметр.Аргумент, который вы даете этому параметру, используется дважды.
  • one_to_two = lambda f: (lambda x, y: f(x)+f(y)) - это функция декоратора, которая превращает функцию g, которая принимает один параметр в другой, который принимает два параметра.Аргументы, которые вы даете этим параметрам, используются каждый для вызова функции, результаты добавляются.
  • lambda x, y: x*y принимает два параметра и возвращает их произведение.

Проанализировав это,давайте посмотрим, что происходит:

  • two_to_one(lambda x, y: x*y) дает функцию, которая возвращает квадрат заданного значения.Зачем?Поскольку это по существу lambda x: x*x.
  • h, что определено, как указано выше, эквивалентно lambda x, y: x*x + y*y.
  • h(3, 2), таким образом, возвращается 3 * 3 + 2 * 2 =9 * 4 = 13.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...