LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > 脚本编程 >

Python locals()与globals()的区别

时间:2013-06-05 10:01来源:未知 编辑:admin 点击:
从它们的命名,locals()返回的是局部变量,globals()返回的是全局变量. 这个差异在函数中就比较容易发现了,建议自己编写函数试试. def a():... b=1... print locals(),globals()... a(){b: 1} {__builtins__: m
从它们的命名,locals()返回的是局部变量,globals()返回的是全局变量.

这个差异在函数中就比较容易发现了,建议自己编写函数试试.
>>> def a():
...     b=1
...     print locals(),globals()
...
>>> a()
{'b': 1} {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main
__', '__doc__': None, 'a': <function a at 0x01A8A6B0>, '__package__': None}

locals()和globals()在访问性上的区别

我们先来看一段简单的脚本
>>> a=1
>>> b=globals()
>>> print globals()
{'a': 1, 'b': {...}, '__builtins__': <module '__builtin__' (built-in)>, '__packa
ge__': None, '__name__': '__main__', '__doc__': None}
>>> a=2
>>> print b
{'a': 2, 'b': {...}, '__builtins__': <module '__builtin__' (built-in)>, '__packa
ge__': None, '__name__': '__main__', '__doc__': None}
>>> b['a']=3
>>> print globals()
{'a': 3, 'b': {...}, '__builtins__': <module '__builtin__' (built-in)>, '__packa
ge__': None, '__name__': '__main__', '__doc__': None}
>>> print a
3

可以看出globals()返回的是当前全局变量的引用,而且可以通过修改b['a']来改变变量a的值.

所以globals()的返回值是可读可写的.

让我们再来看一段脚本:
>>> def a():
...     b=1
...     c=locals()
...     print c
...     b=2
...     print locals()
...     print c
...     c['b']=3
...     print locals()
...     print b
...     locals()['b']=3
...     print locals()
...     print b
...     print c
...
>>> a()
{'b': 1}
{'c': {...}, 'b': 2}
{'c': {...}, 'b': 2}
{'c': {...}, 'b': 2}
2
{'c': {...}, 'b': 2}
2
{'c': {...}, 'b': 2}

在locals()中试图修改b的值,失败了.

在locals()的引用变量c中修改b的值,失败了.

可见locals()虽然返回的和globals()一样都是字典,但其访问性是不同的.

globals()可以直接修改其中对应键的值,而locals()做不到.

转载请保留固定链接: https://linuxeye.com/program/1716.html

------分隔线----------------------------
标签:Pythonlocals()globals()
栏目列表
推荐内容