locals()和globals()在作用域上的区别
正如它们的命名,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)>, '__package__': None, '__name__': '__main__', '__doc__': None}
>>> a=2
>>> print b
{'a': 2, 'b': {...}, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}
>>> b['a']=3
>>> print globals()
{'a': 3, 'b': {...}, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}
>>> print a
可以看出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}
{'c': {...}, 'b': 2}
{'c': {...}, 'b': 2}
在locals()中试图修改b的值,失败了。
在locals()的引用变量c中修改b的值,失败了。
可见locals()虽然返回的和globals()一样都是字典,但其访问性是不同的。
globals()可以直接修改其中对应键的值,而locals()做不到。
Python locals()与globals()的区别
- http://www.blackglory.me/the-python-locals-and-globals-of-the-difference-between/
- https://docs.python.org/2/library/functions.html#locals
- https://docs.python.org/2/library/functions.html#globals
- 8.5. locals and globals
- Python两个内置函数——locals 和globals (学习笔记)
将整型数转换为IP地址
def Int2IP(ipnum):
o1 = int(ipnum / 16777216) % 256
o2 = int(ipnum / 65536) % 256
o3 = int(ipnum / 256) % 256
o4 = int(ipnum) % 256
return '%(o1)s.%(o2)s.%(o3)s.%(o4)s' % locals()