>>> Как замыкания
Интересно, что во вложенных функциях используемые нелокальные переменные точно так же доступны через locals()
, как это происходит в замыканиях с бесплатными переменными:
>>> def f():
... one = 1
... print('f:', locals())
... def g():
... two = one + 1
... print('g:', locals())
... def h():
... three = two + 1
... print('h:', locals())
... h()
... g()
...
>>> f()
f: {'one': 1}
g: {'two': 2, 'one': 1}
h: {'three': 3, 'two': 2}
Вложенные функции, даже не потерявшие связь с контекстом, в котором они созданы, выглядят как замыкания.