Я читаю этот article о декораторе.переменная переменной python во вложенных функциях
В Шаг 8, есть функция определяется как:
def outer():
x = 1
def inner():
print x # 1
return inner
и если мы запустим его:
>>> foo = outer()
>>> foo.func_closure # doctest: +ELLIPSIS
не печатает х. Согласно объяснению:
Все работает в соответствии с правилами обзора Python - x является локальной переменной в нашей внешней функции. Когда внутренний печатает x в точке # 1, Python ищет локальную переменную, внутреннюю и не находящую ее, выглядит в области видимости, которая является внешней функцией, находящейся там.
Но как насчет вещей с точки зрения переменного времени жизни? Наша переменная является локальной для внешней функции, что означает, что она существует только во время работы внешней функции. Мы не можем называть внутренний до после возврата внешнего, поэтому в соответствии с нашей моделью, как работает Python , x не должен существовать больше к тому времени, когда мы вызываем внутренний и, возможно, , должна произойти некорректная ошибка времени выполнения.
Однако я не совсем понимаю, что означает второй абзац.
Я понимаю, что inner() действительно получает значение x, но почему он не печатает x out?
благодаря
UPDATE:
Спасибо всем за ответы. Теперь я понимаю причину. «вернуть внутренний» просто указатель на внутренний(), но он не получает выполняется, поэтому внутренняя() не печатает х, как это не вызывается вообще
OP также спрашивают, почему 'x' все еще существует – jamylak
@jamylak: Это мне не ясно, является ли он или нет. Он говорит, что не понимает этот цитируемый параграф, но также говорит, что он понимает, как 'inner' имеет доступ к' x'. – BrenBarn
в любом случае, теперь вы ясно дали – jamylak