这个差异在函数中就比较容易发现了,建议自己编写函数试试. >>> 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 |