Python - сдвиг возвращаемого значения между кадрами - PullRequest
2 голосов
/ 17 марта 2019

В следующем коде у меня есть некоторые трудности в понимании того, как возвращаемое значение смещается между областями функций.

def x(y):
    def y(z):
        x = lambda x: x**2
        y = lambda x: x+2
        def z(x):
            return x(5)
        return z(y)
    return y(x)
print(x(lambda x: x+1))

Я понимаю, что возвращаемое значение оценивается как 7, поскольку y = lambda x: x+2 передается в z(x), где 5 + 2 = 7. Я провел свой код через Visualize Python, чтобы понять, как он работает, иЯ не понимаю последние три шага.

Шаг 16 из 18: enter image description here

Шаг 17 из 18: enter image description here

Шаг 18 из 18: enter image description here

Был бы очень признателен, если бы кто-то мог рассказать мне о том, что здесь происходит.Спасибо.

1 Ответ

1 голос
/ 17 марта 2019
  1. z возвращает 7, поскольку в области f2 (или в зоне def y(z):) y указывает на lambda x: x+2, а z возвращает y(5). y был назначен в строке 4. (Это показано синей стрелкой на первом изображении)

  2. y (или f2) просто возвращает то, что возвращает функция z (принадлежащая фрейму y / f2). Не обманывайтесь обозначением z(y). Поскольку y в скобках равно lambda x: x+2, так как y был переназначен на это значение. Так что y возвращает также 7.

  3. x (или f1) возвращает то, что возвращает y, принадлежащий области действия x (или f1). y в области x (или f1) оказывается f2 и возвращает 7. Так x или f1 вернет 7.

Если что-то неясно, дайте мне знать, какую часть.

...