Как замыкание Python захватывает переменные его содержащей области? - PullRequest
2 голосов
/ 21 марта 2019

Рассмотрим код, приведенный ниже:

def foo():
   print('------- entering foo() ---------')

   def internal():
      print('x in internal: {}'.format(x))
      print('id(x) in internal: {}'.format(id(x)))
      print()

   x = 100
   internal()

   global f
   f = internal

   x = 111
   internal()

   print('------- exiting foo() ---------')
   print()


foo()
f()

Вывод кода:

------- entering foo() ---------
x in internal: 100
id(x) in internal: 4362053072

x in internal: 111
id(x) in internal: 4362053424

------- exiting foo() ---------
x in internal: 111
id(x) in internal: 4362053424

Кадр стека выполнения foo() должен быть уничтожен после выполнениязавершенным?Однако, согласно выводу приведенного выше кода, мне кажется, что закрытие internal, на которое ссылается f, имеет доступ к кадру стека выполнения foo(), которому назначено f.Как f может иметь доступ к кадру стека выполнения foo(), если кадр стека уже уничтожен?

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