I can not find an adequate explanation for this behavior.
>>> def a():
... foo = 0
... print locals()
... def b():
... print locals()
... b()
>>> a()
{'foo': 0}
{}
But:
>>> def a():
... foo = 0
... print locals()
... def b():
foo
... print locals()
... b()
>>> a()
{'foo': 0}
{'foo': 0}
I understand that in the second case there is a closure, but I can not find a detailed description of what actually is and under what conditions should return the function locals()
.