您的位置:首页 > 编程语言 > Python开发

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

2011-11-04 12:48 239 查看
 
locals 与 globals 之间有另外一个重要的区别,您应该在它困扰您之前就了解它。它无论如何都会困扰您的,但至少您还会记得曾经学习过它。

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

def foo(arg):
x = 1
print locals()
locals()["x"] = 2 print "x=",x

z = 7
print "z=",z
foo(3)
globals()["z"] = 8
print "z=",z




因为使用 3 来调用
foo,会打印出 {'arg': 3, 'x': 1}。这个应该没什么奇怪的。


locals 是一个返回 dictionary 的函数,这里您在 dictionary 中设置了一个值。您可能认为这样会改变局部变量
x 的值为 2,但并不会。locals 实际上没有返回局部名字空间,它返回的是一个拷贝。所以对它进行改变对局部名字空间中的变量值并无影响。


这样会打印出 x= 1,而不是
x= 2。


在有了对 locals 的经验之后,您可能认为这样不会 改变
z 的值,但是可以。由于 Python 在实现过程中内部有所区别 (关于这些区别我宁可不去研究,因为我自已还没有完全理解) ,globals 返回实际的全局名字空间,而不是一个拷贝:与
locals 的行为完全相反。所以对 globals 所返回的 dictionary 的任何的改动都会直接影响到全局变量。


这样会打印出 z= 8,而不是
z= 7。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python dictionary
相关文章推荐