この動作の適切な説明が見つかりません。
>>> def a():
...     foo = 0
...     print locals()
...     def b():
...         print locals()
...     b()
>>> a()
{'foo': 0}
{}
だが:
>>> def a():
...     foo = 0
...     print locals()
...     def b():
            foo
...         print locals()
...     b()
>>> a()
{'foo': 0}
{'foo': 0}
2番目のケースではクロージャがあることは理解していますが、実際に何があり、どのような条件下で関数を返す必要があるかについての詳細な説明が見つかりませんlocals()。