Лямбда-функции Python 3 - PullRequest
       1

Лямбда-функции Python 3

0 голосов
/ 22 июня 2019

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

g = lambda x: x+7
foo = lambda f: (lambda x: f(x+1)*2)
print( g(3), (foo(g))(3), (foo(foo(g))((3) )

Могу ли я получить объяснение того, как работает (foo(foo(g))((3)?

1 Ответ

3 голосов
/ 22 июня 2019

Первое, что нужно запомнить, это то, что lambda - это обычные функции, которые:

  1. Не иметь автоматически имена
  2. Может использоваться как выражение
  3. Должен состоять из одного выражения
  4. Неявно return результаты этого выражения

Так что вы всегда можете переписать их как обычные def функции с именами, если вы запутались. Например, foo может стать:

def foo(f):
    def foo_inner(x):
        return f(x + 1) * 2
    return foo_inner

Таким образом, вызов foo с любой функцией (f) возвращает новую функцию, которая принимает числовой тип, добавляет к нему один, вызывает f со значением и удваивает результат.

Все остальное это просто отслеживание нескольких слоев обертки здесь, которые я оставлю вам; это не интересная проблема в целом. В реальном коде, который использует фабричные функции, подобные этим, намерение и поведение, как правило, гораздо более понятны (потому что это делается для какой-то цели, а не для решения задач).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...