这可能是基本的,但可以帮助我理解名称空间。一个好的解释可能会逐步介绍函数定义执行时会发生什么,然后是函数对象执行后会发生什么时会发生什么。递归可能会使事情复杂化。
结果对我来说并不明显;我本来期望:
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
结果如下:
locals_1: {'var': 'var!', 'locals_1': {...}, 'locals_2': {...}}
locals_2: {'var': 'var!', 'locals_1': {...}, 'locals_2': {...}}
locals_3: {'var': 'var!', 'locals_1': {...}, 'locals_2': {...}}
该模式似乎是,对于 locals 的 (n) 调用,所有
返回的 locals-dicts 都是相同的,并且它们都包括第一个 (n-1) 个 locals-dicts。
有人可以解释一下吗?
进一步来说:
为什么 locals_1 包含自己?
为什么 locals_1 包含 locals_2?func时是否分配了 locals_1 是在创建或执行
为什么 locals_3 不包括在任何地方?
“{...}”是否表示“无限递归”?有点像那些镜子面对面的照片?