这可能是基本的,但可以帮助我理解命名空间.一个很好的解释可能会逐步执行函数定义执行时发生的事情,然后执行函数对象后发生的事情.递归可能使事情变得复杂.
结果对我来说并不明显; 我原以为:
locals_1将包含var; locals_2将包含var和locals_1; 和locals_3将包含var,locals_1和locals_2
# A function calls locals() several times, and returns them ...
def func():
var = 'var!'
locals_1 = locals()
locals_2 = locals()
locals_3 = locals()
return locals_1, locals_2, locals_3
# func is called ...
locals_1, locals_2, locals_3 = func()
# display results ...
print 'locals_1:', locals_1
print 'locals_2:', locals_2
print 'locals_3:', locals_3
Run Code Online (Sandbox Code Playgroud)
结果如下:
locals_1: {'var': 'var!', 'locals_1': {...}, 'locals_2': {...}}
locals_2: {'var': 'var!', 'locals_1': {...}, 'locals_2': {...}}
locals_3: {'var': 'var!', …Run Code Online (Sandbox Code Playgroud)