python locals 与 globals 之间有另外一个重要的区别

来源:互联网 发布:unity3d fbx 层次 编辑:程序博客网 时间:2024/05/29 04:28
 

localsglobals 之间有另外一个重要的区别,您应该在它困扰您之前就了解它。它无论如何都会困扰您的,但至少您还会记得曾经学习过它。

例 8.12. locals 是只读的,globals 不是

def foo(arg):    x = 1    print locals()    1    locals()["x"] = 2 2    print "x=",x      3z = 7print "z=",zfoo(3)globals()["z"] = 8    4print "z=",z          5
1因为使用 3 来调用 foo,会打印出 {'arg': 3, 'x': 1}。这个应该没什么奇怪的。2locals 是一个返回 dictionary 的函数,这里您在 dictionary 中设置了一个值。您可能认为这样会改变局部变量x 的值为 2,但并不会。locals 实际上没有返回局部名字空间,它返回的是一个拷贝。所以对它进行改变对局部名字空间中的变量值并无影响。3这样会打印出 x= 1,而不是 x= 24在有了对 locals 的经验之后,您可能认为这样不会 改变z 的值,但是可以。由于 Python 在实现过程中内部有所区别 (关于这些区别我宁可不去研究,因为我自已还没有完全理解) ,globals 返回实际的全局名字空间,而不是一个拷贝:与locals 的行为完全相反。所以对 globals 所返回的 dictionary 的任何的改动都会直接影响到全局变量。5这样会打印出 z= 8,而不是 z= 7
原创粉丝点击