Почему Python использует промежуточную ячейку для замыканий?Python

Программы на Python
Ответить
Anonymous
 Почему Python использует промежуточную ячейку для замыканий?

Сообщение Anonymous »

Ребята, я совершенно не понимаю, почему Python использует промежуточную ячейку для замыканий. Например:

Код: Выделить всё

def outer():
x = "world"
def inner():
print(f"Hello {x}")
return inner
Теперь и x.outer, и x.inner (не обращайте внимания на точечную запись, это просто различие между двумя переменными) указывают на одну и ту же промежуточную ячейку, которая, в свою очередь, указывает на ячейку памяти, содержащую наш строковый объект.
Что мы получаем от этой промежуточной ячейки? Почему эти две переменные не могут указывать непосредственно на ячейку памяти, содержащую наш строковый объект?
С точки зрения подсчета ссылок даже после завершения работы функции external() у нас все еще есть счетчик ссылок, равный 1 (поскольку у нас все еще есть переменная x.inner), поэтому диспетчер памяти Python не сможет очистить эту промежуточную ячейку. Но у нас был бы тот же счетчик ссылок, если бы эти две переменные указывали непосредственно на ячейку памяти, содержащую строковый объект. Так что я думаю, это не имеет никакого отношения к подсчету ссылок.
Итак, в чем идея этой промежуточной ячейки и почему нам нужно ее использовать?
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/752 ... r-closures
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»